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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 : {, W) i; H% f' c; C
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 # j- \. d6 \4 o- B" w. n+ [
通常不必关心 SOCKS5 协议。
% `1 }, B! z1 @' \4 _! @' D, ?. Q5 O/ ]$ g* C0 i% s
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 # L/ ]2 H1 l6 X+ a
外部 Internet 的机器访问外部时,有用。 4 `2 ]6 j2 a- K9 }4 j  h
$ e& J: t5 j3 m: J
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
9 l3 ~0 \3 |! R" O$ A0 h  w: K机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
$ X3 _( l0 W; W' T( I8 Q网中的服务器,或者使通讯更加安全。 9 R; C+ H! q4 L$ Z! I4 ^2 x
( V+ @! I" s3 B9 f3 B4 ?
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
( y$ E0 {) w/ r" p6 o% }& B, b9 D+ L一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
- D$ w- z- C2 u3 t6 w% f前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 3 Z, f7 [7 o4 d
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
/ X* \7 s* C4 |# q的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 ! B/ [4 C" m. y. x% U. i
器的响应后,也原样转发给前端。
1 d: ?4 s  W1 H
- }. H8 q1 F+ H  q' G8 I因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
# _6 B9 ]7 u3 b% _6 M都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 7 v" {5 L+ k$ n% p4 G
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 ) ?& e. d1 F8 s5 X2 @. E
. P) t$ g3 W6 M3 }5 l2 X4 ~
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 7 C7 P. G! r# T- o' S- d! l
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
4 }; ^9 s, l1 f8 |7 w换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
% E5 {; z6 s! O7 J
' W8 Q) V9 O" Z# W我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 # B+ Y( M1 ^0 ^! [6 M
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
; K: N  ?/ f5 p9 `; r2 S此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 ; e, F0 x# B0 i# k" J. ?4 a
面。
' ?0 h2 [/ P8 r# a2 G; v
( e" z( @% m1 P3 j0 S) z不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
8 S8 N# Z1 m; j  u$ k7 Y" g地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 - B$ e0 H: M: G: g
利用SOCKS5代理服务器。 ) P3 a5 t- m7 X# ~

* c3 {& F) O1 i  V3 E一个支持SOCKS5协议的前端,通常具有两种运行状态:
- c4 q( ?! B8 j7 G1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 ) z7 C$ h8 W4 n- `# y1 {, e# Z# _
的。
+ W- T: w" l2 o/ T2 h* C- ~
2 F) a& o% _, O2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发   E/ B6 S- E4 s6 f* K" [' |
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 3 `* H. A5 x' N$ B
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ' r0 G4 Z' A; ?5 h$ ~5 e- J& a
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 - f5 f, T/ e9 D
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
5 L6 M8 I) K* o: H三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
0 i' [1 V# b9 z  O; T6 _客户端向服务器询问认证方法 - `7 f' v0 c. [* [
----------------------------------- 2 Y+ P& u# f  o& ^9 Z& J
字节 意义 值 ( V2 ]5 S8 n7 @7 r" e6 H
-----------------------------------   |: `( o6 T+ J5 V2 N
1 版本 4或5 5 J# R* Q5 H% Z( i
2 方法数目
* E5 c$ m2 |) J9 E" z# I- K3-257 方法
" ]9 ~$ Q: o7 M1 A& }0 z# E6 e9 t-----------------------------------
6 Z6 _' x1 _( \1 d0 r6 ]3 @0 k%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
  l7 e3 m4 |( o3 O
8 C: `3 E! q% r$ J' W9 P% z, v* m服务器选择一种返回给客户端
, d" Q9 A" E; N0 n$ U----------------------------------- . \2 ^( E2 [( c
字节 意义 值 / l( n: w7 }' q& S; s2 w3 m
----------------------------------- , f& J2 |* q, |+ ]5 U1 K3 _
1 版本 5 ) J$ C0 L5 @1 |8 f. w
2 选择的方法 其中一种,0xFF表示没有可接受的方法 ; v6 [& ~7 [1 {. a
-----------------------------------
6 v: @- V" r) j$ I* ~. _
) d/ T8 R  ]/ E6 J, p2 V6 ?& C连接请求
. ]3 s% c5 v5 c2 p---------------------------------------------------- " M3 G, L: L: U! |2 `8 x
字节 意义 值 . q4 X$ n# M) M3 \5 ~' ^
----------------------------------------------------
' t$ {- o! f) R, U7 E/ {1 版本 0
) T& d+ n2 |$ d1 j6 l5 t2 命令 1
7 g  N( N0 Q. K3 保留 0
5 m: o. \- i- B. w4 地址类型 1=IPv4,3=DNS,4=IPng & }+ k, ~  B7 C& r: e( f$ Q
5+ IP地址或DNS名  可变
! T. V! Y& h! ?& k' L' }最后2个字节 TCP/UDP端口号    可变 : f# z3 Q) U2 d) D, E, p0 x6 F' y
---------------------------------------------------- & t- b2 o# z/ a& W( c

) V6 F4 @5 L8 e0 P. E连接响应 : ?' ^% K2 C. p3 M0 J  ?$ B
---------------------------------------------------- ' W: A! K- v: C$ b
字节 意义 值 0 u; W: o. R/ q5 t" N. W& H
---------------------------------------------------- # n$ z; r+ f# G
1 版本 0 2 i/ c1 ~" E9 u% p& w6 t
2 响应 00-08
) M* T7 C1 {7 w/ a" Z3 保留 0 ; J  `; y; ^$ X  o5 r6 Z; }3 z
4 地址类型 1=IPv4,3=DNS,4=IPng
5 y- A9 k* y8 y5+ IP地址或DNS名   可变
) H, W) I  o- V4 U6 G) W最后2个字节 TCP/UDP端口号   可变 6 g. L  H* Z4 j9 U
----------------------------------------------------
  U* `! y, L% J- ~* z7 ^响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% . v5 z9 a) Z. g" x

( _& m: d2 q- z# G4 ISOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
! z7 W5 u, T8 ?---------------------------------------------------- : {* j; n1 @( s" W5 S2 o8 E/ J- e
字节 意义 值
' N5 u' q* Q% q3 D---------------------------------------------------- * h* \' o- B7 Z) Q  L
1-2 保留 0x0000
/ p' L3 x! b" F  M7 [3 分段数目 可变,0表示不分段
3 \- s  s1 m; B& w: _4 地址类型 1=IPv4,3=DNS,4=IPng - |. E! ?. u; V" T+ ^) J; }6 _6 Z
5+ IP地址或DNS名  可变
& A* t; e. c- x# `最后2个字节 TCP/UDP端口号  可变
2 T& ?2 ^3 c# n- ?6 o数据 用户数据 由客户端应用程序决定 1 @* p+ G* O9 c% }; G1 ?
----------------------------------------------------
+ z/ e) x; B7 R, H
' C. f: n9 S0 S% g, U- L! }SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 03:34 , Processed in 0.035001 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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