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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ) M9 A, K7 g$ b/ d
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 : y% r9 u3 W4 }: |/ ^2 A: e
通常不必关心 SOCKS5 协议。
1 n4 r3 z; s- z' Y
' q- {6 z4 H* bSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
6 H9 F# ]( Y! F1 m5 c外部 Internet 的机器访问外部时,有用。
. I$ J  T% U+ D5 u
6 k; U8 g/ ^8 W! x* [( }% t# gSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 * n8 b/ t5 D. g6 f8 r) a& i
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
" J) F, {2 B3 R, A0 ?/ t- k网中的服务器,或者使通讯更加安全。
( q, [) `5 V0 [: D
5 N: ~2 G( J$ u- u1 T' eSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
4 X' h5 j/ ~& f9 S1 G一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
! R6 }0 T7 p- a7 p前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
+ W7 M7 e! Z* r1 Z7 ]* y2 {器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 ' V7 L/ r' @1 z" J' u
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
3 i" A3 Q: d) W% ?; D! S器的响应后,也原样转发给前端。 0 d5 Y  B) n# V4 O) X) j
) J* t$ P- w. E# J9 R/ t' Q( B
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 1 @1 p0 _* q* N0 a9 q
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
: p2 ?' _9 q3 h; z2 @5 c& \: {是它能够忠实地转发通讯包,完成协议本来要完成的功能。
2 A8 v) Y- v4 u
& e9 Z+ E: O( m9 ]0 e! ~- S与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 1 @, K3 k* @2 p/ y* L2 Y' K
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转   W3 N2 N" H. k$ z( D# w
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
/ x3 Y( L8 r. M' _( S% u8 t! C) ]
7 _* O: W0 y8 M, s" z我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 9 v# w% O7 Y" V# v6 g2 w" c$ _
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
% ^6 }+ @8 N' b+ A" {; U7 {此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
1 @) V9 l- `. i5 C$ y  P8 |面。 2 e% ~. ^+ P: L7 h4 I
6 [  g  }& o4 ?+ g' V6 K$ `1 f
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 - J+ g! U3 e$ ]4 ^7 x
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
% e. r3 `6 |* U& S+ K! P* P利用SOCKS5代理服务器。 0 _8 o+ E* X) C" {$ n, O
6 L' h* u2 B- W3 b* k! M
一个支持SOCKS5协议的前端,通常具有两种运行状态: * [. }" `; \8 |( S
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 2 B8 {6 p" P; W5 H3 ]
的。 ! z9 T5 Y9 e. n& x2 \- q( P
4 y- B% i3 C8 X0 V# o# N$ l
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
! k& f+ J4 q3 c& \! g, \6 S送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 + O2 g  [% P( J0 v- R1 d$ \
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ) w! O" S# z, F( q6 y
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
; b5 e' r" @. GSOCKS 5和SOCKS4相比有所不同,具体流程如下:
. g1 K/ s. r1 n8 S0 z- X三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: - W6 @6 |! _9 ~4 F+ O. u: ^7 D* n
客户端向服务器询问认证方法
! l1 G8 T/ H1 l8 s9 L! t-----------------------------------
5 y1 V- C! {: j$ N1 K字节 意义 值 0 J% ]& Y$ N: ~( }4 \7 k
-----------------------------------
7 B0 @5 z8 g6 ?$ v. x+ l/ y1 版本 4或5 7 Q4 w5 A: F, {) p
2 方法数目
3 f( @" b% F* J" Q8 {: O, \7 I# _, _3-257 方法 * E; C2 z4 U  }' T4 v
----------------------------------- 2 S9 K1 t# F% R: o$ u6 U
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
3 Z$ o. p5 m) b) p9 ?, y* s- F! g& y, D2 Q
服务器选择一种返回给客户端
/ @9 ?0 L0 _1 j( g2 A2 J9 L, n-----------------------------------
% n8 R7 ~/ D1 q" M/ v字节 意义 值 ; ^  m; K$ H9 N7 G
-----------------------------------
9 v4 z: Z& h2 [! D/ [! c% V* I  I1 版本 5 ; o& M4 V3 Y' b7 s/ w: O# g
2 选择的方法 其中一种,0xFF表示没有可接受的方法
& w* X5 Y; k* |$ A----------------------------------- 0 m8 l/ Z6 z* n  d* |8 g2 J5 p
4 w' C1 `+ M& k1 J8 w
连接请求 7 ?3 W, g. A) A% ]+ w2 O3 ^
----------------------------------------------------
7 _2 A' H* L. ?  B& n" E字节 意义 值 6 s' K" d$ h8 Q' E8 y
---------------------------------------------------- 9 V  ?$ R; Z0 G4 w* A( F, H
1 版本 0 % B3 m# \) x6 N6 h- p& @  t/ {
2 命令 1
3 C" ~- P+ ?7 [6 k5 q0 {$ B& H3 保留 0 ' Z2 f. X" w6 I% q7 N' w/ n! @
4 地址类型 1=IPv4,3=DNS,4=IPng
0 w# ]5 F6 E4 F( j% }- D5+ IP地址或DNS名  可变
$ ^& p2 [! |. B2 w最后2个字节 TCP/UDP端口号    可变
2 B1 \7 P3 z; I$ Z  m---------------------------------------------------- 0 {+ k3 u( ~* m$ r* `# o# Y

. Q' {0 x% v1 X1 v1 i4 o; q连接响应
$ k* x5 Z0 P2 K4 s: Z8 @----------------------------------------------------
2 W) \( p( y5 @/ V7 ]字节 意义 值 / V2 o9 P+ Z& q) ]- m! b
---------------------------------------------------- ) B3 O$ R8 v4 W6 X" Z
1 版本 0 8 |+ o8 k# T; p  a
2 响应 00-08 $ x2 D+ w' C( l% k+ t! |, |
3 保留 0
- Y. h+ G/ y5 x! R0 e- V4 地址类型 1=IPv4,3=DNS,4=IPng
# z) f8 {' X. t: M" l7 N7 R/ A5+ IP地址或DNS名   可变 6 b7 d( G: J9 `9 @1 O
最后2个字节 TCP/UDP端口号   可变 1 a3 K0 `: r4 {( B2 V$ _& Y
----------------------------------------------------   h& S, {2 x# i0 L: n
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% . Y/ Q# B( \5 `& ^
' B# ]( ?* o! j9 j- l- T) u
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
" M& j+ W8 q* f3 S0 _: c---------------------------------------------------- - D, E  l# J' q2 \8 s% P! h
字节 意义 值 % X$ |0 {  `! ]1 r
----------------------------------------------------
* n; e; W/ a" a: Q. M- Q1-2 保留 0x0000 ; e& V$ w( n7 Y' L
3 分段数目 可变,0表示不分段
  n! u/ n& w& ^5 c3 U& A4 地址类型 1=IPv4,3=DNS,4=IPng
8 s( {% h  w4 Z5+ IP地址或DNS名  可变
6 V5 D5 @- x; n( o0 \8 Y$ ?最后2个字节 TCP/UDP端口号  可变 2 ]! }2 g4 c* U& {; G+ ~; {
数据 用户数据 由客户端应用程序决定
- m: h" ~" O. o0 B----------------------------------------------------
/ r8 @: R: \7 G8 \+ B
' ]* |1 P8 q7 v8 c8 j5 ISOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-15 04:51 , Processed in 0.016456 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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