找回密码
 注册
查看: 5940|回复: 1

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
  P6 \; R. A; R* J% X上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 + K5 A' K- y' a9 q' O. F; N( U
通常不必关心 SOCKS5 协议。
* y) \: ^5 j  q; I! H: l$ t  N# q' X3 h
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 / J$ q$ I" W) o8 J1 Q
外部 Internet 的机器访问外部时,有用。 9 j9 q- h& w6 c. @
* _6 c* m# h) b1 w- r, i
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
& P0 K" Q6 U2 z6 O0 V! }( a3 c机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
2 \) o! W+ I# U+ v6 l2 O1 {" S3 W网中的服务器,或者使通讯更加安全。
  v( I) o' [. W, G
" E' O# t8 G. v8 y7 s- C, aSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 5 Q2 ~. O$ v' t+ m9 G5 O4 R
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
4 {" A& \5 z& L( G前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 " j) n# a( b( {5 b
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 & ^! ^% _3 j5 M7 Y7 Y
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 ! }* Z0 i  B3 H# j$ t! J
器的响应后,也原样转发给前端。 2 z5 z1 I+ f+ U  X+ h! `

, x- R# |! C" E. ?0 h! z因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 6 ^, u6 f2 I$ g: E6 L3 S- s8 d
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 , w: |4 u4 K( ^  H" }
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 2 u, p  u' c0 P! J  ~
  c. D6 E, p- b0 u
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
9 o9 T- M# M3 T. t# L) A件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 + `9 d0 z9 }& i
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 0 T) l5 r6 Z  Y3 P8 {$ I7 J
+ l- M- C2 w. I4 A6 B3 V) p: n4 H  ^
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 * R3 a0 U$ o8 `/ E
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
) L3 y( A$ _" \/ \2 u$ J' ]此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
* G8 ^, m' ~! O( l$ T面。
' D' m1 P0 G7 l9 ~$ j3 }
3 [! A+ u0 ~7 }8 _; J1 l; F  B不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
9 g, S% A: m  }, |地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
8 Z  p  x+ X% \4 v5 b- L2 ]- }7 l/ q利用SOCKS5代理服务器。
6 E  }) D3 T/ T% {4 _, Y* s2 `
  m! I: [& |* {2 r4 j. m* {, R一个支持SOCKS5协议的前端,通常具有两种运行状态:
' O/ }$ ]# Q! T) L* y1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
8 }- y& H9 f1 W$ v; M& _5 Z的。 4 D+ l7 b5 h# ]3 w$ X
$ G" w* {$ v7 [0 H6 e
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
" }- n; D( M# t! j! ?. S9 ^送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
$ G& q, r, l% \" N; @  l* G告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ' g; R. W' v4 h- f4 ]$ o
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
  }* h; I! X0 k9 n" a$ CSOCKS 5和SOCKS4相比有所不同,具体流程如下:
& N7 [- I/ c- ~; l" ^: ~; p/ f三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: : Q8 k- u8 _3 g3 H/ m
客户端向服务器询问认证方法
6 ?! O- a) j! H0 d----------------------------------- , r+ o; y: H: S
字节 意义 值 ) \- B( I, ~) q2 g0 Q
-----------------------------------
2 J3 X. I# |6 ]5 ?0 Y1 版本 4或5
" Q. D. ?" V; J- p6 |2 Q) @; Y2 方法数目 . j7 M% H1 p( s& p* }0 H1 d& n
3-257 方法
5 B* y/ i/ C5 s: y- A2 B$ C----------------------------------- * \3 ]5 D$ Z/ A0 _0 O
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
2 ^9 o% C6 ?3 k% D. Z" c% A" g: o& b7 o+ y  L
服务器选择一种返回给客户端
, a% w0 y. Z8 E8 g: p) Q: H9 W----------------------------------- $ a  ~  C) T8 ?) ^
字节 意义 值
) W% u1 Z( g: m& _: N----------------------------------- . c- o4 G5 y4 v! H, s
1 版本 5
- m. T: L1 a5 ~- g/ J# O4 J2 选择的方法 其中一种,0xFF表示没有可接受的方法 0 X, p9 w6 W2 d4 v0 l! c9 q+ ]8 L
-----------------------------------
1 a3 S9 A# {* r  Q0 T) `
: [1 F& f2 b1 m3 |! s4 ?" u7 d: S8 D$ g连接请求 3 A6 F; G' T4 Y3 p+ h4 d' D
----------------------------------------------------
0 t. f2 e6 r0 X* e! O字节 意义 值 ! i" m9 w1 m  q6 E9 P
----------------------------------------------------
' o$ f( T6 g! z' w1 版本 0
; ]: M. K3 f0 H, p$ G& m& E2 命令 1 4 {/ u% z2 J& T) t3 {# w% W/ Q
3 保留 0 % {( T; c/ N" V0 s( K
4 地址类型 1=IPv4,3=DNS,4=IPng ) v: c% B4 l3 z) o5 W4 H- m8 N& U
5+ IP地址或DNS名  可变 # U# |6 w5 M# ~% T: U
最后2个字节 TCP/UDP端口号    可变 . w2 i" s8 e4 d2 i' j4 m, M4 ~
---------------------------------------------------- + v1 Q: A7 |3 E8 s

% S+ x& s: t0 M) m- ]# f7 ^连接响应 / i1 w# s- k) B5 r$ W5 N
----------------------------------------------------
+ w: Y# O$ u1 r# F' r9 W字节 意义 值
2 f6 E$ `0 L4 W" Y----------------------------------------------------
5 Y" ^  y) X- X1 c2 k1 版本 0 * J( ~( r. p7 z) _6 |
2 响应 00-08
& U9 g3 I4 s; ]8 E- B" e7 q7 a3 保留 0
% N% p+ |- X- E( ]( b& @* x8 e4 地址类型 1=IPv4,3=DNS,4=IPng
0 _  Z$ l; `" w) o* E. [( F: s4 Q5+ IP地址或DNS名   可变
# I0 f5 t" }+ p' H最后2个字节 TCP/UDP端口号   可变 ) Q- l, l- [, q; c0 H# t1 z( J- k' n! r
----------------------------------------------------
2 W4 Q3 q0 U1 Z) R5 P3 r/ @! W响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% : Y3 |: |$ m4 m' Z- |4 S7 n: j% {

& m% P! O0 T( m* P8 `SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: 6 U* I: U6 p) v, K; s, M6 X
----------------------------------------------------
' [( ?) D) K6 y7 S字节 意义 值 % q( D- w( z+ J$ z5 K! _
---------------------------------------------------- ) z- M4 ]3 c8 p# P+ e! L) z+ |% q
1-2 保留 0x0000 % q( V4 E: A1 T+ r: q: i% F
3 分段数目 可变,0表示不分段
: D9 f5 H6 e8 O& E* p) I/ {- }4 r4 地址类型 1=IPv4,3=DNS,4=IPng # a- m6 M* O* Q( M4 Z" n8 U9 H
5+ IP地址或DNS名  可变 8 l, W, S+ Y1 \$ C
最后2个字节 TCP/UDP端口号  可变
; C. A1 z" z5 {% L- ?" `: K数据 用户数据 由客户端应用程序决定
: `5 U$ d6 B) ^7 f4 O& ?0 _# s0 Z5 @" Y---------------------------------------------------- 5 D4 P# A; Y" M; h6 I# T- Q

* B/ K6 Y$ E% Y! ?, mSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-1 22:02 , Processed in 0.017151 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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