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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 5 A6 A1 H; [/ o. w+ s2 J6 x
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 ' F0 s8 y! H5 L& o& l7 g) `
通常不必关心 SOCKS5 协议。
9 h/ A; s' C# ?! D9 T; K
/ u) ?/ G& u) P0 @0 N% [SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 % p3 A2 g- x8 J
外部 Internet 的机器访问外部时,有用。
" u- y% J0 [2 l6 \$ [) b7 g* [9 X5 {! k  N. `) _( a
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 : ~7 `1 W/ N) B; Y
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
: ^6 G& w2 [9 `% R9 r5 U网中的服务器,或者使通讯更加安全。 6 c4 h( m7 q6 c2 z! u' _

6 t6 ^6 i) ?3 C( t0 \1 U; qSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
2 w: t" n$ G* K一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,   E% |3 z: d) }2 L) `9 u
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
1 Y; \( T/ b0 P3 }- w/ H6 u器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 0 O/ b. l8 Q/ D; v9 H  j5 t
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
! d* q1 f% M2 M5 V* X: r6 V器的响应后,也原样转发给前端。
8 \  ?" W7 t, n: a8 U- C: O) z
1 _- n" U5 q* a7 G* `因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
1 i' E) u5 L; z都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
6 H6 \8 g- r& s+ m是它能够忠实地转发通讯包,完成协议本来要完成的功能。
& |2 l# R" u$ ?3 D6 }
+ G% U% u" {) {, r  U% q+ Z与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
) E$ |+ h; M0 R7 k  L! ]& C2 T件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ( m, V: U* G8 V' j' i0 A
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 ; @8 T  s; b5 z; K+ T1 n
6 J4 Y  t9 U5 W' C; U1 t0 t/ ^' F; d
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 7 V6 c, G1 D* B/ r
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
: M7 s9 H5 [9 n/ T3 q此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 ' y* Q. L( S  f) I! h
面。
4 _5 b& K- z7 L% {$ t2 t+ I, q. }2 j/ T# q4 }4 I2 }7 Q/ ~6 P/ j
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 " f1 C: O3 Y. _  H' x9 V7 J
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
2 ]7 E" m& N" |0 O9 T利用SOCKS5代理服务器。
; f6 j6 L% @8 d7 I1 @* c6 P0 q) Z$ @
一个支持SOCKS5协议的前端,通常具有两种运行状态:
+ }  V5 S) d- V6 r2 O1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
- w, H/ w8 z7 X# c& p. }的。
9 t- `) B# r4 l+ P6 d: N' q' Y
7 O% }. z- p$ u; d5 {  Z2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 0 L- C/ J; Z+ j
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 6 X8 N1 H; X3 a5 e
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
6 _" A* S: G8 _/ G9 d. S- N服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 3 n/ R% n4 U$ k
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
% L4 C5 D9 J( \& e9 N三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: ( ~) X1 o% E# }! U
客户端向服务器询问认证方法 : S: g0 s9 u/ k9 j' X* o7 k
-----------------------------------
. i1 E4 Q# Y* J7 Y# p# q字节 意义 值
# ~% G3 R6 Y& `, Z-----------------------------------
% y7 i. ]7 P6 e: N$ W& d1 版本 4或5 ) n$ p1 R  _5 n9 u6 `' a% c+ U- s
2 方法数目
* F2 Q5 a, Q# [" J3-257 方法
0 z: Z* W4 h, o# x# P7 @----------------------------------- $ M+ Q" [% E+ a' k1 _
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 4 ^) Y* j$ c/ m8 {

, G* Z1 {  ?9 k服务器选择一种返回给客户端
+ f9 g6 h7 R* ]+ S/ U, ^-----------------------------------
; U; f3 p2 o/ K字节 意义 值 & [. R( B% y9 d& Y* R& i
----------------------------------- % @: z, k& l/ A, R$ K7 Q. ~0 a
1 版本 5 " Q% C9 s5 K' G% j% @
2 选择的方法 其中一种,0xFF表示没有可接受的方法 7 Y- }( d& U4 w4 U7 D; x
-----------------------------------
, W* s. @: a. w4 d% o, ~5 J
6 s7 q6 C' f  b2 a. B连接请求
* w, c# C; D: n% v----------------------------------------------------
4 Y' l( V$ [2 t& w" W3 E字节 意义 值
5 \; q: b0 H2 O% ^; o----------------------------------------------------
  E$ I! J) U. K8 n5 Y: A1 版本 0 % `6 q3 o- b6 V8 {* D
2 命令 1
, F, W$ V3 ?" o& e& s: c3 E3 保留 0 5 u7 X& w8 R& |/ P6 t! }
4 地址类型 1=IPv4,3=DNS,4=IPng   z. ^# z! A  \9 P/ _
5+ IP地址或DNS名  可变
# [0 R: y5 k8 ?- R& F* Q: K( ^最后2个字节 TCP/UDP端口号    可变
, \* B: P1 B5 o+ Q---------------------------------------------------- , z' s2 y" d0 @- c7 L
5 a) n/ ^0 ^3 R7 G, P* \6 E$ R
连接响应 - {4 L; M: X9 ~- J& |, l) J
----------------------------------------------------
7 G6 K' g8 b" z9 J& J0 d+ D字节 意义 值 3 B  _% ~% o! D0 ]  d) l
---------------------------------------------------- ! e2 W% H) s  m1 l; F
1 版本 0
" I$ R% I' f* A6 Q" R$ T5 Z% {2 响应 00-08
2 Q* h  z4 J  k3 保留 0
0 h2 Z. h7 p' e# \  o% j4 地址类型 1=IPv4,3=DNS,4=IPng
* f9 |( N$ l) e6 z$ P  }5+ IP地址或DNS名   可变 9 Z2 [9 v3 d. b" o1 O+ x
最后2个字节 TCP/UDP端口号   可变
# Y; t; R8 v7 m( k7 m----------------------------------------------------   h$ T5 l2 z! _5 p. }
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
% T4 g6 ]9 o4 m6 {( y
9 b2 H5 W% Y) d2 }+ R/ f1 bSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: / Z5 {  d0 x# z8 d
----------------------------------------------------
) f  e4 c. f$ P字节 意义 值 : ^( }: ]. b9 e$ ?8 u" h) U
----------------------------------------------------
# t, J1 y  k3 v' F) J1-2 保留 0x0000 ; y- W& S" e8 R
3 分段数目 可变,0表示不分段
+ E2 h1 C0 d  G4 地址类型 1=IPv4,3=DNS,4=IPng
; }2 ~5 z1 B! S' [5+ IP地址或DNS名  可变
& K+ a% o8 Z- o7 [. e6 }; \5 P最后2个字节 TCP/UDP端口号  可变
/ X+ z$ s' w- k0 w6 Z) A; \数据 用户数据 由客户端应用程序决定
" O! n" q& P; G, h" K% A4 L---------------------------------------------------- & q/ U( @: O9 K+ G, p: }' u
* @0 T7 j% D+ B1 S
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 21:41 , Processed in 0.019536 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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