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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 - _8 `- z* o( p6 w6 Y; @+ U
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您   v& k9 g3 m- u( ^8 r: r4 o5 s" O
通常不必关心 SOCKS5 协议。 , ~0 q' p5 m4 e. k) y9 G
7 z  x/ u( d3 p5 `
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 " B1 X7 K1 A, }0 B* G, O1 C  E
外部 Internet 的机器访问外部时,有用。
3 t- m1 X2 i* z" H' ~. E7 }+ g- J/ ]2 T) k) w( W2 r, S7 F! W
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 ! R7 x, C7 Y1 ^) _/ g( V
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
/ \' U/ @. V" M* _网中的服务器,或者使通讯更加安全。 : l8 x  t: i# l3 u" M% t

/ {6 h0 [. k9 O- T8 Y9 bSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
( ]; |5 B$ W" _! o$ [3 @! N7 h一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
) i8 t& T2 R, o8 i前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 7 R* k' ^: S+ z$ I0 H6 {6 l
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 ) @" ?0 `4 d2 E/ o4 Z
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 5 w$ U8 U) a! e+ j7 Z1 k, c9 o9 i
器的响应后,也原样转发给前端。
4 M- S; k/ ~1 ?' g1 J/ z2 w0 A: n, k/ F  q/ U) \
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
" S' s! v0 x1 l0 p都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 & m& F% f2 t; l3 r
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
0 j+ v. S5 r0 c! N
& O+ U& }. y, A  L# d" f) @与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 " M0 G2 w1 ^' e
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
. T- |% Y/ M) L+ W0 Z换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
6 T0 ^4 n8 V, J6 L
* e4 I0 O8 Z6 z- n我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 4 b8 A2 P% R- d. z; |6 l
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
: @- Q4 v* P  L1 _此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
! G8 B- K. h! H8 F面。
3 X) E* S' M2 n# D: c& Y
! o2 Y; R8 a* s  i3 j% y不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ' Z, K' a4 S) w  _8 x% [
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
* n8 v: t) r  h' _: ^5 N8 n利用SOCKS5代理服务器。 . i. W$ X: `7 y4 D
7 r; ?  r* v7 g+ I( o' v
一个支持SOCKS5协议的前端,通常具有两种运行状态:
7 x* U. C& w9 x. z1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 " a* }" a! u3 m
的。
. O' N. ]* ?6 E3 N
( G. @# u/ |# f3 `5 j2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
) D4 S& M0 u$ S5 r送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
% n" ^3 W2 r: a: n# r" M- f告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 , J/ `  u# }; X" H9 g+ q
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
6 k9 ]3 w+ ?1 E& _0 a' O/ z8 L8 \8 KSOCKS 5和SOCKS4相比有所不同,具体流程如下:
( W) v3 L. v7 f* C7 t$ N$ P3 m. F三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
4 r  W) r* ^9 Y6 G  I+ G客户端向服务器询问认证方法 / y; K7 y4 [4 }: Y, e
----------------------------------- $ m8 E- ?% \7 v
字节 意义 值
. O7 `+ z; _2 Z- m. e-----------------------------------
/ }2 F8 f  x$ Z/ q1 版本 4或5 " e' f4 _1 b- s
2 方法数目
1 {: Z, b5 S# E% S2 @3-257 方法   A( Q9 |3 B, b+ ?) v
----------------------------------- ( J& t; ^" ?* P- f
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% . R' l! J5 N! v0 g& T, x: M
: p2 q4 ~. }4 M1 G
服务器选择一种返回给客户端
1 D7 w% ?% \. ~3 b/ ~5 H----------------------------------- 6 C. P8 \3 @" J  ?; |$ C) l9 `
字节 意义 值 ' \) w6 T% O* F" D" ~& ~
----------------------------------- & x2 a3 X4 ^8 i7 M, G+ `" k7 Z8 i
1 版本 5
2 q& _) D* I$ {% r/ R2 选择的方法 其中一种,0xFF表示没有可接受的方法
$ v9 C9 z8 j' e- P/ |' u% E-----------------------------------
) @& A" }( U$ _, q0 N
0 }9 k9 _1 S0 e6 v* B+ }1 L连接请求
# ^! I9 @  o6 \+ S----------------------------------------------------
6 Q! [9 v7 Q8 g6 c9 Y字节 意义 值 . v. f- n- v/ J* Q
----------------------------------------------------
7 y1 x4 x2 c( M' e: e1 版本 0 - n0 L" h3 [$ _& _
2 命令 1   T0 x3 M8 }) Y2 V* T: j& f  {. p. J
3 保留 0
' Y( C" }! q4 Q7 n# A; i4 地址类型 1=IPv4,3=DNS,4=IPng ! o- v2 T9 V# B& z# m5 ~
5+ IP地址或DNS名  可变 6 z2 c- n$ L5 t, M6 |
最后2个字节 TCP/UDP端口号    可变 , f0 C1 N3 A. N2 o5 p5 E2 r
---------------------------------------------------- 9 |4 W& o8 W$ X: O" `
9 [+ r/ e* |, H$ `7 `9 z1 d/ k8 S
连接响应
  V  _( b6 p: s4 x, _, Z' v& b---------------------------------------------------- 1 G) j9 b  L" m4 j2 a
字节 意义 值 " y2 c! ~/ {" `4 Q" D" f/ ^
---------------------------------------------------- : G# H+ O$ P; T  o8 V
1 版本 0 + [* k( Z# {+ f8 z/ u# F  j
2 响应 00-08
+ T& o3 c# U' q# o$ b: V3 保留 0 0 D+ p  K; B( z, Y& D
4 地址类型 1=IPv4,3=DNS,4=IPng
6 C  O' `2 I! j/ O- ]5+ IP地址或DNS名   可变 - t* i7 M7 W8 l. i+ V" X0 \4 l% @
最后2个字节 TCP/UDP端口号   可变 0 e, K* L0 ?) X5 t
---------------------------------------------------- ) Q# u1 @- g' g: z( H3 I
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
/ ~( ?5 Q& @+ N% W; O9 H9 K0 S$ l# G; T5 W4 ~+ b8 m5 J. K7 Q
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: . u; C/ V3 G. u$ ]6 P
---------------------------------------------------- ' b) u3 p* N/ D4 D5 {" s
字节 意义 值 2 ^% {. H5 ^& v$ b
----------------------------------------------------
3 s: F1 L  L& N+ l1-2 保留 0x0000
9 ]+ L; N* E) d8 l& s' _3 分段数目 可变,0表示不分段 3 s6 ^2 p- N! Z* K9 a+ p; n: ^
4 地址类型 1=IPv4,3=DNS,4=IPng
6 e1 x5 u2 D* N9 M5+ IP地址或DNS名  可变
0 p7 S( e! g, U% x$ i: n& d) _最后2个字节 TCP/UDP端口号  可变
! N& I: W/ z, N0 i$ }% {数据 用户数据 由客户端应用程序决定
. A8 q$ m; I. r4 X5 Q5 ?----------------------------------------------------
$ V/ C7 w: Z; k5 Q# L' o/ u" c% S  X" ^" ?3 g, W: M0 z
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 08:51 , Processed in 0.018693 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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