找回密码
 注册
搜索
查看: 5844|回复: 1

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 9 e# q$ k, J2 g! e
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 1 `& C, o  b- l; i. Y+ d: t
通常不必关心 SOCKS5 协议。
8 i; n7 S9 f1 a! G4 S7 y
( U% ]# U' ^9 {  K+ m$ uSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
5 y( c# W( U$ a) s% _. o外部 Internet 的机器访问外部时,有用。
' g/ a$ w2 V' D! h- s/ e, c* v0 j0 p/ `3 ]) J4 V! e) S
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 1 Z  P6 U0 z7 \$ h2 C( Z1 Q
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
5 r" C4 T# _  \) P4 F4 f3 O7 h网中的服务器,或者使通讯更加安全。 ' S" i" n* \' c

; B3 H- k1 X1 `. {# NSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 0 Q/ U$ _7 B; }
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, ( b$ ^# x0 W/ R$ m$ s
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
4 [0 ]; I4 A( `# h% u# N器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 / c% ~) ~+ b8 r5 b  a; p
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
7 F6 z- u7 o) t$ }器的响应后,也原样转发给前端。 & m( q: ~8 T( l2 a

/ K; a. ^6 u+ K因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 . P+ d% U. }% o9 j
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 3 C% m6 g) Y* Y8 J% y$ p
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
, b: O/ q0 h- v0 [/ w2 ~+ L6 D; t( x3 F) U# r) u& l2 y, R
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
9 o$ q* S- S9 ]. q件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
& G& M. E( ^0 f换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
6 O( d/ C  W, e6 _- S$ q) P; j( F; {7 c! i" z6 {4 E7 b
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
: y/ Z+ }3 P% X- g2 z1 m办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
1 B4 C: ^/ P. H9 C& W此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
3 L! ~% X# q1 V: @面。
# S* Y. B; c* d; I( A& U- q* F# a
: a) r, t% |' W9 J& h) \% i% R+ j% ]不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
. H3 @7 z: W$ g. Z) y地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 * A# m" v( [6 A, E% |- f
利用SOCKS5代理服务器。
# Z1 a, Q9 k1 e) z3 e% L) z: r$ J& s
一个支持SOCKS5协议的前端,通常具有两种运行状态:
4 [8 _" m; i% _; j1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
' [9 E) `; d& b: [8 C5 h的。
; v& R: ~9 P  x: ]4 r5 O
5 T' e4 h. b/ \& K0 F" e1 m2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
( U* m% S, t& L, O7 m送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 7 O/ K6 V( {* `! }
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
% q! \& w  }6 Q服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 ) C2 a6 Q2 N8 y% c' g' O
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
' G8 k+ P! H5 D, S4 Q5 A3 h三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
# d: |, \( M* G; K( O  |! J客户端向服务器询问认证方法 6 L6 @# t1 N# ?/ e9 j! _$ e
-----------------------------------
2 M$ H$ Y& S/ j1 U5 B字节 意义 值
" s; |' `' _9 R4 ]) E-----------------------------------
, M; ]/ e. m! d  T  q/ b$ A1 版本 4或5 7 a) a+ V! V/ a4 Q
2 方法数目 2 G# N! m2 u$ r6 ?
3-257 方法
+ c  x" u8 G; t3 W& a* [& W----------------------------------- ) }* ^7 h! P. R8 _$ |: ]
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
3 V6 T$ m) L3 I- N3 u) ^+ u
& H: V/ I" H9 G服务器选择一种返回给客户端 2 ]% u/ l2 G+ H# r* ?4 w
-----------------------------------
" q1 ^* i0 F) ~字节 意义 值
; s8 o2 |4 \. ~7 p# Z$ W" B----------------------------------- : R+ E8 A3 p  R* v" m: \3 ]/ f% k
1 版本 5 - O0 s7 p- I) U+ \3 w. h# R
2 选择的方法 其中一种,0xFF表示没有可接受的方法 3 Q! g: d# g9 F5 D8 J. L  l
----------------------------------- 1 V3 h2 `, O8 c) W, P

& t; D# M1 D- ~& p' s2 G/ N- b连接请求 8 R( j% {! }! Y# ~
----------------------------------------------------
/ y( `8 [5 R4 x: g+ B& |9 E5 H字节 意义 值
% S9 N( S9 E9 v- E---------------------------------------------------- 9 b$ S% E) N+ C0 c! ], [" Z
1 版本 0
( S" T$ o* y2 `' }2 命令 1
$ D7 G  o7 I* u$ ]; {! e; y8 n3 保留 0
6 A" T# d2 d1 q; }7 q! H4 地址类型 1=IPv4,3=DNS,4=IPng . E- Q% e1 }9 q- h! \6 F
5+ IP地址或DNS名  可变
9 B8 J' _4 U$ |2 v& R, O最后2个字节 TCP/UDP端口号    可变
, H4 `, n, g( `0 a) d----------------------------------------------------
4 j9 o8 q! C2 b  o- H* D
5 i7 x9 w  i* R/ A+ e连接响应 * s+ j+ Q& ]1 r4 X. w
----------------------------------------------------
% X& H$ M) m% i1 }% W+ Q. \4 Q字节 意义 值 8 E4 R0 s3 k; @
----------------------------------------------------   ]. A1 S* v8 m7 a3 r2 `3 n# b0 a
1 版本 0
" @' _- Y  b9 ^1 d! G% k4 a1 u2 响应 00-08
; X# n5 `6 F. r( |& z' ~3 保留 0 - e6 D$ w& W  z
4 地址类型 1=IPv4,3=DNS,4=IPng ( f1 y# U2 u/ J& `5 U: n
5+ IP地址或DNS名   可变
8 k4 T0 `; v1 K/ j最后2个字节 TCP/UDP端口号   可变 / j. `; r: M$ x6 h5 b& C, X1 c1 u+ L' t
---------------------------------------------------- . w7 N$ Z% m- e) A2 G7 S& z
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
) c7 Z- U+ n1 Q9 ?9 C$ c
/ J+ j$ [2 M5 U* }SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: & ]3 N: K0 Q# P6 L* ?
----------------------------------------------------
6 f( x2 y0 a  t! K0 z; w: D& O* E字节 意义 值 ( y: w7 @5 k1 P5 y5 x! U
----------------------------------------------------
/ F9 b% g! }; \  K# h: f; l' h1-2 保留 0x0000 4 _; ~- ?& l1 o5 N0 ?7 W5 J
3 分段数目 可变,0表示不分段   n( T8 V5 H3 X0 j9 ?
4 地址类型 1=IPv4,3=DNS,4=IPng
# H0 a2 z) S8 |" a* Z: T5+ IP地址或DNS名  可变
+ G6 }/ [1 F7 z& \/ t5 \1 B9 I最后2个字节 TCP/UDP端口号  可变
0 K# Z; k# f7 E( R. ]数据 用户数据 由客户端应用程序决定 6 [( I$ o* ]2 C) Q6 @
----------------------------------------------------   }7 {# K, z+ e/ {7 K. G  `8 x  q- u
0 {# c$ V! q  S1 x" O1 U) Y3 N
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-6-18 15:13 , Processed in 0.016246 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表