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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
4 q+ Z& r/ M6 i* e# ]4 y/ l8 j上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 ( U1 C& J) o, ?$ u$ H+ k& W# v
通常不必关心 SOCKS5 协议。 - T5 N. C+ d2 x1 {" H- _' `+ {

) i0 J) J) L( ~( f. }SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
+ m7 w3 Y# e2 A5 Z外部 Internet 的机器访问外部时,有用。
4 L* c! f) O6 U
) `; d" g+ C3 i: p. vSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 4 J$ |  C* G: n6 k4 J( z0 D
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 8 e% s1 f2 U5 a1 j% Y$ B2 l+ S( Z7 s
网中的服务器,或者使通讯更加安全。
; l9 x: Q2 D" M6 S0 V" s8 K; p6 j
, O6 K1 q" M" l" q$ x" L  Q! ]' ZSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
! k7 G& p. E' z6 x* P( t7 f, f+ d- q一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
1 U" `! F( b0 q) `* Z" m; H前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
: o0 C' B2 y$ M器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 ! |# l9 _( M. o! f/ M
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 * }+ Q+ X9 p3 z8 Q- n' y5 `
器的响应后,也原样转发给前端。 9 {" a, y$ N: h# o. Y

% l3 W# u  [2 B因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 . s  i+ t, U- n( ^: f5 x( J# T/ C! I7 K
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
, w' }: ^! g2 b% g" \/ n$ r是它能够忠实地转发通讯包,完成协议本来要完成的功能。 % k5 K: C; S% T4 Y. O# I5 J

6 F, d5 Z1 e& [) [5 Q$ O7 v. u/ @6 z4 N与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 8 i1 I4 w; p/ V- y4 a$ L
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转   |- L7 q2 l; Z( B
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 4 t) y* w. X& n- U9 \2 a: [

- q1 u7 ?$ l8 `; {" B- {我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
" f* G, w5 I5 x3 S; E8 T办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
: J* ]9 x# k! e$ N. V2 x8 R" M% }此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 4 v% X/ H  ?7 p  C
面。
4 r- l1 @5 f$ [2 m, K
% @  M$ `' o; \  z不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ; q0 z9 c! L- L, h1 P2 g1 r) w& g
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 . `4 L  h  ?+ P: Y: Q0 G9 M
利用SOCKS5代理服务器。 8 T0 X3 S; [% A+ G# f9 o9 ]1 K

. n( S! [6 [  G! A一个支持SOCKS5协议的前端,通常具有两种运行状态: # w/ k! q3 \1 d- Q1 z
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
5 ]% J. f6 F- I, D0 s- ~的。
0 J. l9 I. Y$ t" p' q* N9 M
' t# U4 s0 B8 W# r# I+ G+ a( d2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 0 c, M+ [( `' z& I
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 + U9 B+ P2 f+ w  a! x, q
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
+ J; w8 A5 L5 v服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 & R. |2 T3 b: p7 @/ V. Z5 i6 j* u
SOCKS 5和SOCKS4相比有所不同,具体流程如下: " G+ F6 g7 D  L4 S
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: ) @3 F, r# m1 q) K& ^; a
客户端向服务器询问认证方法
+ E* ?9 {5 m7 G  c; [- N-----------------------------------
) h9 B# ?3 U% K) O# _字节 意义 值
9 g2 e/ N7 N/ d/ u' |6 w% Z----------------------------------- - G8 T- B$ p: ~* p
1 版本 4或5 * ]7 |1 K7 \4 o2 L, H
2 方法数目
9 F4 h: @7 ^- J: D  }0 c' F3-257 方法
  }/ |" |- z% s: \+ Y# A" s----------------------------------- " Y+ C5 v: n- l$ N, m8 c
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
" K! b, K$ J$ B" M9 R! \  c/ g+ Y5 `3 f9 G' q; Q2 i2 K1 m: ^# U
服务器选择一种返回给客户端 . G  _6 V+ l! N7 y7 `, S
----------------------------------- / ]$ o8 v; m0 u8 D
字节 意义 值 ' Q3 ~6 n9 F0 t- ]) }
----------------------------------- ' e/ }- m( X/ s8 b. _, O3 c
1 版本 5
, o* V5 u+ s; W) w7 w+ v2 选择的方法 其中一种,0xFF表示没有可接受的方法
: I1 A# F3 O% u9 O1 J-----------------------------------
; j5 \& x0 x& O! h6 J% L$ ~
! I7 ~, ]' a' s$ J连接请求 & `  {3 Z5 r, N8 R* E1 O. C# z
----------------------------------------------------
9 c) {+ i; A; U字节 意义 值 : p: C1 @- ?; m$ M# S* L
----------------------------------------------------
: j. Q; Q4 w# N- Y1 版本 0
6 r6 n& O( t2 v3 c! f' ^' G5 }; u2 命令 1 3 l- Y* y2 C- t2 v
3 保留 0 9 h8 N$ d( H: o6 q7 u; @/ B% R
4 地址类型 1=IPv4,3=DNS,4=IPng : n7 `$ I9 ]1 K& K5 f
5+ IP地址或DNS名  可变
; W8 s7 k' e3 x9 n最后2个字节 TCP/UDP端口号    可变
- c- u) x1 y! a7 f. f" U---------------------------------------------------- : I2 Z  ]! U2 c/ [0 d# X' X0 ?
# r, H, ^$ E/ l4 e' r
连接响应 $ y2 P$ p+ u1 c" ^
---------------------------------------------------- 8 W& }$ ^! B% V1 e9 F; L; n
字节 意义 值
9 v5 P, U! @5 n1 p9 f5 a9 I% c* s----------------------------------------------------
1 |5 r# r! j, N2 s' e1 版本 0
6 A5 c( \: p6 T2 响应 00-08
1 L6 w$ J, j" d3 保留 0
6 O$ }/ y" K) L9 t- G# @- {7 ~4 地址类型 1=IPv4,3=DNS,4=IPng 0 @( n- ]& P/ |* f" M5 S
5+ IP地址或DNS名   可变 3 J1 O* U( I/ S5 ]; P. O' \: d
最后2个字节 TCP/UDP端口号   可变 & ~+ Z# O8 N' e/ \, P- ^4 R% ~
----------------------------------------------------
9 H; L  e3 H. w  r9 U- J响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
9 t- J' @3 p9 E0 ^' R5 D) b6 n1 f
9 x6 N% r) ~) z; W. hSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: 5 I0 }# E* T& g
----------------------------------------------------
6 ^- J6 H8 Z; O$ Y& w9 p4 N字节 意义 值 9 ^* H* l7 e* _5 \2 J
----------------------------------------------------
& k( r6 I# U2 K' `: e. k1-2 保留 0x0000 ) }0 B4 t/ c8 k* @
3 分段数目 可变,0表示不分段 " U0 [# O6 @; L) R2 j
4 地址类型 1=IPv4,3=DNS,4=IPng 6 i! Y" b7 X) [
5+ IP地址或DNS名  可变
( O( ?( X' t) Y( p9 u最后2个字节 TCP/UDP端口号  可变
" o- {2 w1 O# d9 Y$ J, A数据 用户数据 由客户端应用程序决定
* o" p+ {( a/ U  _---------------------------------------------------- * m( p4 `2 ^6 O/ P* a. s

/ O3 H! r7 E' n) q" ?8 pSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-15 12:53 , Processed in 0.018415 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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