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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
( ^$ i/ D% Y# T. S6 I2 A' G3 s上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
8 }# J5 n4 n0 e7 Y通常不必关心 SOCKS5 协议。
  \" S4 S$ m' L! d1 l' U5 N7 B, L% ?4 Q7 m  B; ]' c% j, l
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
  L( S9 H4 W4 _$ H+ R  Y0 ~外部 Internet 的机器访问外部时,有用。 , T  l1 G8 f7 y- }; g

. N8 p) W+ E2 o6 z7 A5 |* ASOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
" z; V! c( M0 \3 i机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
) ?7 z9 f- O. ?# J  n/ ^网中的服务器,或者使通讯更加安全。 4 V- P3 Q3 j1 J; o0 W) b
7 {; m! t5 b/ I
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 % J; B1 D1 }% J6 [
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
! b) @5 h2 a  J0 x: e0 j前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 1 g/ s3 Z- L, C1 N4 A$ K
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
& }/ ?' ^1 d2 }的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
& V0 ~0 Y/ _" K' Q. ?器的响应后,也原样转发给前端。 " {' ]- f0 [' [/ G' |8 N$ S9 G$ e" C

! s# n$ ~1 M; z: c  i! y因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 ' p) [# C3 i* a  w; Y, x- b
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
+ _0 N2 k! p3 @7 I" W是它能够忠实地转发通讯包,完成协议本来要完成的功能。
5 g+ b0 E, O, p1 T3 q& ?8 y5 c* ~/ b6 s. p
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 : c# n5 I. G% n+ Q- H
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 " m) ?+ @' ?9 X
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
0 m6 _2 m; H+ d$ g3 I- Y. C7 u6 N3 t
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
% t& _: H  H. [  F  g' i7 j% e! M办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 ( _3 c1 x2 j% I1 y1 o% b
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
9 M3 {2 B' q: J9 v面。 1 A+ X) T: {+ f7 E  B" E

- b1 g5 Z" _7 }5 {4 }' x( v不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
, d& J+ z% ^" R$ T$ L% r1 j地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 6 n- j5 `# {, ]" B
利用SOCKS5代理服务器。
: {4 c8 p4 h) K
2 x4 ~- f; R. K# ?7 S一个支持SOCKS5协议的前端,通常具有两种运行状态:
: u7 F5 G: F  ^; F8 I# g1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 9 m5 Y! \! [5 v' K, {) G9 K
的。
/ y$ O+ _. s4 L1 r0 c7 `$ a) ]  r$ g4 o# c! f1 ~
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 - @7 [+ f3 ^, k; I' j& ?
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
: _/ o$ \0 ^5 b# \- A+ D告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
: L( M8 [% B+ b% B7 Q服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
% z6 ~! A( ~* n, T0 lSOCKS 5和SOCKS4相比有所不同,具体流程如下: 7 \  ^# F* z4 ]1 \9 D9 W7 v
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 2 H, M: v3 s+ ~6 H* K+ `
客户端向服务器询问认证方法 6 H8 @/ R1 X! @! G% X: Q8 B
----------------------------------- ; M. |- v/ T4 T- [3 x
字节 意义 值
  {( q7 F7 ^' ]-----------------------------------
7 q" l6 r/ Q% k( \1 O1 版本 4或5 0 ^5 Z" G" O; h+ M2 J/ ^
2 方法数目 # q3 N' j7 J) ~7 l
3-257 方法
! A" Z' c4 F; e" z/ {; A3 g; J$ E-----------------------------------
, y( n) Z% ]* x$ ]7 x0 a. M%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% ' D6 l& q9 c0 C5 W
, _* U0 B1 _5 C& q
服务器选择一种返回给客户端 : {$ u! n$ m2 B; c: \
-----------------------------------
' }  o! c4 _) O$ Q字节 意义 值 ! A$ q' F) O$ _8 a/ F& o  h8 S% \
-----------------------------------
& |8 D1 `0 v+ L, h1 版本 5 ! g  x: W) C' o5 f- N7 D' r3 H& N
2 选择的方法 其中一种,0xFF表示没有可接受的方法
. g  C: z- b) z3 `- H4 q+ F$ W, H-----------------------------------
' |5 H" V6 G1 r0 {. ~7 J. \  x% n7 K8 L* K- G7 _( i8 _0 \
连接请求 & r9 L  T& G$ A% Q4 C% `
----------------------------------------------------
2 M- J. s$ a" @- a$ x1 w字节 意义 值
& ~$ n5 [* H0 z* [---------------------------------------------------- # l3 g( s( A4 W4 p, x% A
1 版本 0
# G. ~& ?! o5 P# l: f8 {# \: j2 命令 1
) A  h' F; S+ e6 E3 保留 0 1 X: Q0 s0 p! d/ d; \
4 地址类型 1=IPv4,3=DNS,4=IPng
+ Q3 N: }/ [, h, O( y5+ IP地址或DNS名  可变 . e, U: Y6 h" X2 t4 j$ V
最后2个字节 TCP/UDP端口号    可变
! W; W2 ]$ H' x* M- t0 L. x---------------------------------------------------- ) ?% b5 f$ t3 A8 ^% Y1 m: `
! F  a+ Y$ R0 J# I
连接响应   _) y! E9 M3 y$ a* X  V6 [% X
---------------------------------------------------- : T" U, h& h, e
字节 意义 值
. A  P: f4 ^8 E2 F9 k: n( `----------------------------------------------------
0 I+ F, Z5 D6 y1 版本 0 7 W* @+ p( {3 C& Q( D2 [' Q
2 响应 00-08 8 y4 G6 ?' b# w: Q) F9 q; [
3 保留 0
6 M; c# w: |- W# T$ i2 S4 地址类型 1=IPv4,3=DNS,4=IPng
' I% U8 g4 F6 x; q5+ IP地址或DNS名   可变 ! i8 |& q$ G( j6 v$ ^# H$ u
最后2个字节 TCP/UDP端口号   可变
& G% W) J8 J+ y( k1 X! |& |7 N---------------------------------------------------- % O( F% B% f0 N) H1 L1 `# \
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% 7 _. W" o8 x: e/ B4 B' b, P$ p0 c

) R! X0 c8 Z2 QSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
3 H4 _" v9 P) u5 m----------------------------------------------------
/ i+ S" r9 d. R6 S9 [字节 意义 值 * e) s% @6 s$ e& a  |
---------------------------------------------------- + b5 Z. x: B4 J; r# O
1-2 保留 0x0000 6 z- o- ]+ ^8 b7 [6 O
3 分段数目 可变,0表示不分段
* k7 \1 U: Z8 _, {! n, }: V8 |2 B3 t2 ~4 地址类型 1=IPv4,3=DNS,4=IPng
; V( j4 d; I6 o8 R6 g5+ IP地址或DNS名  可变
$ K" U. T- s' }5 u5 ^7 Q2 |8 O最后2个字节 TCP/UDP端口号  可变
" G. P2 |, @& H- }# ?& D/ W/ R数据 用户数据 由客户端应用程序决定 2 i: o; n5 C% d: I( p# J1 ^) @: p
----------------------------------------------------
3 ~* L6 ?3 x0 e% d! G4 ]2 E& ]6 }0 P  ]% m2 S/ U) T# J& L& \+ |
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 10:29 , Processed in 0.017128 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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