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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
2 R. D) I( l/ @! t& B上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
+ R" }' \+ `0 d! U- B" p通常不必关心 SOCKS5 协议。 * u0 P: _. l$ b1 T

; d6 K0 ^# q& ?5 E& s: VSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 7 A6 K' m3 |+ i' G9 y9 C) B# a
外部 Internet 的机器访问外部时,有用。 ( R8 D& V) s* ]  h

& ?, ~3 ~1 \0 iSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
; |  w- {0 T+ K  Y0 b机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
* c6 l) k9 R3 ^/ Y网中的服务器,或者使通讯更加安全。
' u3 G7 a; f$ A& d7 Y
9 V! d6 K2 B7 Y: FSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 ) c9 i( Q' O# u7 Z7 f3 h
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,   K0 q7 M! [& N4 P1 f& f5 T
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 . D8 j( {" {2 A
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
+ W" t' C0 H$ L的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 9 ]+ B9 `* Z6 i0 l% ]3 W/ Z
器的响应后,也原样转发给前端。 $ u1 {; k) f$ o' h/ e

1 C$ }2 [/ Y, F7 n. a0 B3 L* z; L因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 6 \0 `; I5 K, O% r! J) L
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 0 I9 U% Y- d3 Q6 B
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 6 n( X7 O) i4 J; K+ t

3 x5 n. O. h/ r$ }; S6 ?# f3 s与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 0 u* b" X5 u  C1 Q8 f
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 : @/ v' c0 e7 x8 I9 @1 u
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
( ^' b: E/ N3 W2 E  M9 m  ^1 s2 A; i+ k0 Z; ]
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
2 ~  M8 Q$ Y5 C办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
, B+ b8 f+ b) e8 j$ ]+ s( W此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 & ~( `. x( L. s3 B
面。 3 C7 n3 V2 ]2 x) v* z" O
: ~. z5 w- J( k) [( P
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 1 L# L1 i9 w8 W6 M7 ~
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 2 x' a- l& U3 {7 ]( _# o
利用SOCKS5代理服务器。 ; b  Z: [3 z- i* y0 y/ b

8 S( }$ J" Q; n. f一个支持SOCKS5协议的前端,通常具有两种运行状态:
: Z- G% ]' \2 \0 S) n6 `1 l1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 % i- b# ~& c5 V# a- A+ m9 F
的。 ( N, u- _  |8 _3 G

* k5 ~) m5 F0 m& c. [2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
+ l0 B& @) V! b) r* t. K/ f0 C: c送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
0 h: \' Y& S" @告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
) `& N% n( @3 x* w服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
% Q! ~: V2 a! g! e8 G- \. zSOCKS 5和SOCKS4相比有所不同,具体流程如下:
  P4 V  c" J6 }三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: * _5 R4 _" m% {  U$ _
客户端向服务器询问认证方法
$ F( C: {; L& x----------------------------------- 4 `7 G  G  h! |. y( w1 ^
字节 意义 值 " H1 I* P1 j; x$ ]
-----------------------------------
0 A/ O  O0 ~' V! c) C1 版本 4或5 $ j4 b* [" _; ^1 l; Q
2 方法数目
: h2 |8 g$ j: @% j3-257 方法 ( I4 }; A3 ~! |, e' r4 f% {* P5 a
-----------------------------------
* l: N/ {$ h! T%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% * b, p5 v  V2 h. h$ w
6 z$ `3 R1 V4 d+ a
服务器选择一种返回给客户端 " ?1 k# F# t& D: J
-----------------------------------
; o* b) k& z/ e. w" \/ u, T字节 意义 值 5 i9 i$ F/ S9 g  w
-----------------------------------
% e& }1 A; T8 p3 [6 o9 J1 版本 5
" U' I6 U9 V+ w/ g$ Y1 K# |3 ]2 选择的方法 其中一种,0xFF表示没有可接受的方法
. F  c; l- j) Q9 r1 r----------------------------------- 7 V' A4 q9 s4 X' u
' A( s4 |: v9 t8 J4 ?
连接请求 ( M4 L5 Q* z4 m* n% W
----------------------------------------------------
  R! d" o1 x# {5 k: [/ A字节 意义 值
# n: X6 H/ ?$ v& R: d# X---------------------------------------------------- 4 f3 o1 e6 h  P& x8 \  |
1 版本 0
5 u: }' e# d+ Q# Z% Y6 r2 命令 1 : }: s6 P' J. [- Z
3 保留 0
/ w+ h" q0 s7 A0 R" y4 地址类型 1=IPv4,3=DNS,4=IPng 7 N! _4 ?$ _  U7 {6 j2 s2 v
5+ IP地址或DNS名  可变
4 I, x- G+ r  Q  i- S5 d1 b; z最后2个字节 TCP/UDP端口号    可变 2 S; o6 B. m* M, V3 _; h6 P& N
---------------------------------------------------- 0 ], o! j7 b+ _8 y+ `; I4 G* |! f

6 W: y) z) v' w连接响应 3 ^; f' a8 G3 F: v) F) r
----------------------------------------------------
" H2 J" @. }( D2 [字节 意义 值
% |: A; R3 P( {1 Q----------------------------------------------------
0 [3 _- E  G  X4 ~1 版本 0 7 y) R9 q( L, }5 u3 Y/ A
2 响应 00-08
" u5 x+ ]( N/ X+ W% u2 K" u3 保留 0
4 W9 U1 D6 }( ~: {+ ~( S4 地址类型 1=IPv4,3=DNS,4=IPng
& O3 I. q) `. Z" V% X0 j. ?$ j5+ IP地址或DNS名   可变 % e( b7 Q% R4 ^
最后2个字节 TCP/UDP端口号   可变 % k/ y4 O0 j  X( N: i
---------------------------------------------------- 7 c' I! e' e6 K
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
) q" ^2 G, U8 `/ T! u+ R
  R. k0 z* B9 [9 nSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
; n( @' a6 H5 Q) n$ V" j---------------------------------------------------- + o! m+ F/ P' Q7 x7 I: \
字节 意义 值
1 U1 ^5 }; _1 P' Q, E7 R1 I5 p---------------------------------------------------- ( M: h; O- N* {& a
1-2 保留 0x0000
1 M( D; ~& Q. d& r3 分段数目 可变,0表示不分段 # E& D! X8 a( T' I% e+ A4 X1 \2 E/ V
4 地址类型 1=IPv4,3=DNS,4=IPng
& Z0 b. j: h0 }5 n/ i5 Y# p5+ IP地址或DNS名  可变 ; ^! a- h3 G8 {8 z( l
最后2个字节 TCP/UDP端口号  可变 2 w: {  n  n5 P) W& j1 F
数据 用户数据 由客户端应用程序决定 ( c7 Z0 E8 D4 |; o" L: x
---------------------------------------------------- ) Q) [4 J" z) L0 K% W" o4 R
2 e& q- |4 j' j4 l6 O7 K: W
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 19:56 , Processed in 0.016824 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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