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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ( g" \" s/ W/ `+ N+ G& h
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 " {6 @6 N; `( m0 Q+ P/ u! f
通常不必关心 SOCKS5 协议。   y' S$ |0 C& y) \

. o0 G) A4 n1 ^7 QSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
( J. D* k. t5 b6 ~外部 Internet 的机器访问外部时,有用。 : o, @0 g1 |. o1 D; x& s) j
, u; C0 ^+ G) E
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
/ G( o+ Z3 F& `# H, r5 b) T! @1 \机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet % q$ M& N! j0 ^" w# y5 m8 C( t6 N
网中的服务器,或者使通讯更加安全。
8 b9 @( J/ t4 ?3 o
0 l5 E* D- [6 C) j' W+ t% |1 `2 DSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
. K. U$ H+ F' Z* C$ \, B一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
: n! O9 J; W0 X6 ~: t前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 # i/ I7 _' ]) C9 L$ U
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
( h" ]% l; y3 b5 S: N的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
, t# h2 B) E6 N器的响应后,也原样转发给前端。
, z: G5 S. }  r' m$ }- z
" c" ~9 n# x" n: D* g% c因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
3 W( u1 Y; f( ~都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 * n0 D! d2 \# U$ g  U: E, R5 k
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
, j/ Q8 w3 b0 u3 v' k
, H& F" S# w" n  }与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 & H" d1 z1 ?% N' l& P0 r. ~2 D+ t
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ; }, x# q7 O' v; O
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 ; [; b, i1 N/ x+ z
- }- S; A4 A( s( p1 f
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
: B. S0 u) P: o4 f办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 3 \- }- ~# z+ G  q2 E
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
6 }8 w, U2 j; t面。
& [6 d9 t! {- ~/ k6 |! N5 T7 T( z8 z# m0 S" h/ X
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 , c) d- l, F6 o$ b7 a
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
; w* N1 T% @& w1 n7 S利用SOCKS5代理服务器。 ; b$ e5 x) L& I8 W

' s( Z/ o) u2 ]; E' u一个支持SOCKS5协议的前端,通常具有两种运行状态:
- ~- n$ B  g$ j1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 * _9 b0 X2 H; u/ I7 O
的。 ) P" ?# i2 v8 a, q
5 e7 s7 ]: C& C/ O* Z
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 & G. [5 w+ `' ]9 H& l5 L
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 / x( T- M9 O" M% X
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ( j1 {5 x9 T! X/ u( p
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 2 w* [% V% S9 [! ?. a/ W
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
  K! ^: J- u7 Y7 X; P0 h9 d" x三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
. W8 [. K, ~% G/ @$ b6 j$ K客户端向服务器询问认证方法 " R2 y( j# i; z3 Y& M, B# V
----------------------------------- " g6 C1 u$ b8 _4 {2 N0 v
字节 意义 值
; \5 X" U1 ~1 f+ f8 _* }% y----------------------------------- 7 J  k% w6 t1 }9 O
1 版本 4或5 6 t; c1 P8 `- ]& s2 W7 v
2 方法数目
% b, H! l5 z1 f# _3-257 方法
/ A5 B/ Y+ ]- z7 t! y----------------------------------- : p* r6 q4 b6 s' W
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
) z  B1 B  N( b3 J
: g/ i# o6 x! x服务器选择一种返回给客户端
: t% J1 d+ o( X; B8 }----------------------------------- 1 j3 ?2 `; f& ?# n3 p
字节 意义 值 * Y9 h* M( Q( p7 L- q
-----------------------------------
. l4 E( P3 V4 D  K2 z2 [+ |1 版本 5
+ Y2 d) {0 W; `7 z2 选择的方法 其中一种,0xFF表示没有可接受的方法 " X: b; _& \/ N3 p
----------------------------------- : q7 s3 V7 b, O" J6 W
* j8 g! w( Z% H4 D
连接请求
6 I( o% @1 h/ y8 ~& C----------------------------------------------------
  k: }/ W1 E0 `/ U: q% l( V字节 意义 值 ) W. d& P: S3 e* J" S$ i' E
----------------------------------------------------
1 `0 m9 [4 T* M) ]; n4 J* |1 版本 0
' C5 o3 P* z) T: k( H2 命令 1 9 ]! x; f3 _8 r" J5 g
3 保留 0
' |6 X. q/ u- V# ]  |4 地址类型 1=IPv4,3=DNS,4=IPng
7 U. C: k$ q( s& ]% B6 N5+ IP地址或DNS名  可变
. ]3 ^. m( ]3 o最后2个字节 TCP/UDP端口号    可变
2 m- l/ S* h* [' }! Y; k% U" b! Z----------------------------------------------------
0 H1 J: u% \+ F# |6 O
8 h. F( O& }7 }! N5 P+ q  |; z连接响应
2 \1 M3 Y, ~% c8 m* o4 \* x5 g----------------------------------------------------   f0 M6 Q& s, ]
字节 意义 值
8 @0 n4 A+ \4 s! A) ~+ W----------------------------------------------------
- g/ H# v+ W3 j: G1 版本 0
0 u  b& @$ P6 a1 p; V2 响应 00-08
& H0 _% C' W  M- }3 保留 0 1 b$ B( w7 x0 n5 L+ K
4 地址类型 1=IPv4,3=DNS,4=IPng
3 K) N" G# r$ T5+ IP地址或DNS名   可变 " S  u+ R2 \7 G5 j) T
最后2个字节 TCP/UDP端口号   可变
0 j0 s. v! q: o0 `$ ?---------------------------------------------------- ! B& D, W8 j8 y4 p
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
9 p- G3 d: q4 n5 f$ X' d+ ^. Y
/ |# r# ]# T5 ?3 {$ I. H. XSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: ' J( |% x  @( V. c9 G
---------------------------------------------------- $ N( Z! Z( b% f# ^3 y; ~. r" c0 J0 s
字节 意义 值 1 B5 h" t( K- [: H3 z
---------------------------------------------------- 1 M) l1 E0 G$ X: a9 h' D# f: H' w
1-2 保留 0x0000
/ R/ f, W' t* o# n3 分段数目 可变,0表示不分段
/ l! n! e1 t: `4 地址类型 1=IPv4,3=DNS,4=IPng 8 C" K8 J# X  w6 J' i$ A
5+ IP地址或DNS名  可变
# Y0 s$ [& m; [2 z最后2个字节 TCP/UDP端口号  可变
6 G, n  _; V9 Z6 u7 J: B% W数据 用户数据 由客户端应用程序决定
, D  _6 U6 R- R( k---------------------------------------------------- 9 e, t3 q  {* y1 `
! i+ }6 D, a5 S
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 10:14 , Processed in 0.015698 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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