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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
9 D- {' k% h) u3 s6 Z$ q) |  K上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 + y/ l: D5 \& ^
通常不必关心 SOCKS5 协议。 + {  ?9 F3 K7 G  K; c8 x

, @1 M3 ^) a! g# B  f7 h. BSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 1 P) \! x* s; {. @0 v% K. U# w
外部 Internet 的机器访问外部时,有用。
5 d& I- n1 D, W( f; u
/ I+ u' i+ F7 l9 R% k, j2 U' HSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 % W! e2 [9 n4 i# i" q7 a( @1 y
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
( Z: t* k" _" O/ |$ t1 X7 i' H9 o网中的服务器,或者使通讯更加安全。
5 n$ ^  ^; }: q$ t
% @! F. x& ?6 G9 x# pSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
1 @- @& F4 e- d) |一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, # j8 z3 F" H6 J; T# l
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 ( b. E" H# H% l
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 9 V5 k- _1 A" F+ j" o
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 3 ]1 f* y) t( L
器的响应后,也原样转发给前端。 5 X/ N: Y; e3 N0 K3 y# X3 D
4 u2 N1 }6 t' u6 d  T/ p
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
0 P- a( K( [* N/ c5 S/ w1 h4 |) d都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 7 m7 N! v" y1 M$ b9 T8 D
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 0 w9 L- r( C/ n+ j8 X3 M3 w, @
' d9 B( A* N8 f5 N) \
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
, o) s- T/ W- b6 G7 ?  R件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 + R- p! A2 v# d7 C& t
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
! X# \2 F- D# r6 U% P# l
4 q2 z3 b9 {2 W! s0 R- |% [5 |2 m我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
& [; R: ]7 o0 d办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 . w; |: b7 Y9 ]& G) e
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 ' W( K/ N7 ]/ _3 L$ O1 c* E) z8 J
面。
% E$ z% h0 p2 a; p. N' j  u$ S+ b
9 ?( m2 K& I" y不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 " d2 c  r+ W% Y1 e% Z, z6 v
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
' u$ w- A6 y3 U( ^, b5 F* R9 ^利用SOCKS5代理服务器。 ' g0 r6 w6 A4 o9 A  |2 u
& w" Y, `/ I  T
一个支持SOCKS5协议的前端,通常具有两种运行状态:
- e; h$ l' S7 r3 y- T1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
1 K" ]7 q% T6 Z4 Z& C5 P的。 ' X2 s( l. D7 r- B2 h# G5 @; b- t7 J

! l! t1 I. m% G% y: D+ E. \2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 7 R, X& ]- B  ?
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
9 h. G1 v) _4 ~/ G8 [/ U3 W告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 " X9 C/ t, V5 y) r5 P* B, \
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 ) c7 _2 |- ~% D6 J; Y$ v3 d
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
8 D3 C; @3 N! S6 R" I$ \三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
- R# S* H. m) w+ P/ S客户端向服务器询问认证方法 % S7 V5 J: f& m
-----------------------------------
2 f# g1 K3 z1 w8 @- @字节 意义 值 $ h  K& A% V& V, F, p) L4 _. [5 w# }
----------------------------------- : @# ?. ], A. P  ]; ~
1 版本 4或5 ) m) ^3 x& n) a* V; t  G
2 方法数目
1 F; Q+ ^) e4 `5 S1 \. L3-257 方法 # p' F+ q1 k1 i" O4 s' `. L5 a
-----------------------------------
  _* W0 Z. o" V! N%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
: Z" h. Q4 x% b0 m1 V' c9 Z
- f1 g1 y: f2 V3 M4 o服务器选择一种返回给客户端   c  w& W! S/ }; S6 Q, O( L
----------------------------------- 5 t4 r9 d. H/ b5 i
字节 意义 值
2 e1 {$ s! V% r9 f  T4 ~----------------------------------- + j! y" o- N( Q  I4 O) L
1 版本 5
" b" C+ V, m7 S6 k# p2 选择的方法 其中一种,0xFF表示没有可接受的方法
; V( U; X3 ?' N: J& [-----------------------------------
0 z' p$ t, F, E4 j- |
+ R$ a+ O" L' x9 o( |连接请求 + T; O4 O! w4 {, l- N* a. ]8 Y0 Z7 a) A7 T
----------------------------------------------------
) f$ Q6 Z; `3 u" J字节 意义 值 ' h4 _0 _* X' ]; F
---------------------------------------------------- , U2 ^/ h! F  p7 l# w" v: d) L! R
1 版本 0
% m& ^, s, p0 K8 W3 w' K" H2 命令 1
/ |6 k! F) U# F# w3 保留 0 3 I% k0 L! a5 J9 H; r" C4 Q/ G
4 地址类型 1=IPv4,3=DNS,4=IPng + ?8 z. g5 g6 z! D6 L1 {' }" z
5+ IP地址或DNS名  可变 9 e5 J! T* r+ M* e
最后2个字节 TCP/UDP端口号    可变 % a/ ~$ s' k' v( s7 J
---------------------------------------------------- 7 V; X$ T) _. |

0 F6 ?5 P+ G. a5 T3 {: E# @/ Y/ [3 C连接响应 - F/ Y' p7 @: v
----------------------------------------------------
, u- _+ d+ j" K! X# U字节 意义 值 ; T3 y$ P. ?4 P; e- ^
----------------------------------------------------
* E+ @& V/ E: C, b1 版本 0 - `/ Y5 a1 ]9 Y6 M' O
2 响应 00-08 : _. l- P, ?1 Q4 z$ N4 I, o
3 保留 0 3 w& t2 F& u- }' ~! f" f
4 地址类型 1=IPv4,3=DNS,4=IPng
( r, e6 Y9 U. ]/ i5+ IP地址或DNS名   可变
$ i5 K/ e6 g9 s& }1 G6 v最后2个字节 TCP/UDP端口号   可变
+ K# V' G* X* u( q- X! c- Y----------------------------------------------------
# S) x4 ^9 |9 e: ^- |. f' B# r响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% . T& ]2 |# S# \8 V0 S

0 I% Y% H9 g2 U9 E1 W7 H9 T7 s6 LSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
4 l# T0 h" p6 A7 Y, s----------------------------------------------------
1 T9 X; g3 N  d# X+ y: u字节 意义 值 5 p+ t8 m$ c8 j
----------------------------------------------------
3 I; h5 A& t: I& g- y) g. ~  l0 c5 R1-2 保留 0x0000 - q( W  y3 _7 X- ]3 Q, c
3 分段数目 可变,0表示不分段 4 l, Q+ W" S8 y+ n% q
4 地址类型 1=IPv4,3=DNS,4=IPng % c; m  M5 r' q9 C5 }: s- h
5+ IP地址或DNS名  可变 3 Q+ ]" \, t# F+ {8 y
最后2个字节 TCP/UDP端口号  可变 - m. a/ l5 D5 p- q
数据 用户数据 由客户端应用程序决定 # @) o  i2 j. `& f  C, k, N
---------------------------------------------------- / t2 T& W& B1 c
, n& E* L4 W5 a* `$ H! P
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-15 05:20 , Processed in 0.018614 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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