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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 . y5 T% F6 C7 [
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 3 e! I9 ?0 a  K: d$ ^7 L
通常不必关心 SOCKS5 协议。
$ a* u5 r  e& f4 j5 n" E/ ]
0 u7 R8 T; e8 a2 F$ p$ ?9 bSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
' S8 h/ [. M  B外部 Internet 的机器访问外部时,有用。 3 I" H1 J, M( _) x' x
5 j. T. U' |3 N% D' L' Q8 N
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 ; t, ?1 q, Y" b$ t2 M
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
6 W' Z1 ?& @# O  D8 @网中的服务器,或者使通讯更加安全。
4 G& q/ v, h9 q) W: l  }, `6 s  s4 c
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 " D/ _. K" j" c" v8 E  N, p& N
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
8 h' `3 q" P2 v0 T前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 2 T% N' |5 L. M" H
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 5 Q, e( S; C/ B. [& g' p' U
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 6 H6 l1 r9 o! B4 Q( E; I
器的响应后,也原样转发给前端。
% |% j3 P, O2 h; i& Y
5 n4 l6 T7 U( d1 e& f5 U/ d因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
; B- O5 J8 m: |( |: o1 W  a1 {都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 + J, \. }0 V* v5 d
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
9 Q5 a: D$ j4 C# ^- c( i) a; Z. Y0 O) s
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
' @. m! E9 P. x( w件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
$ v6 c6 B& r3 E. f- C- j( K换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
) u. o# [1 X9 K# l8 B# p* J# y, B& N) }. G4 |: A3 i: {  }
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
2 o/ ?  m3 t$ B; f  z办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 ! J# {! q- R% o$ t9 z6 t
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 / j3 L  y8 S3 C" m* F
面。 " |6 S+ W( i) s6 f) p5 E5 x8 v
, q+ N$ F3 @) R: _5 y  E6 Z* A
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 , J% y( D( i2 \* e+ h+ N
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 & T/ }7 H6 I3 ^' g6 `
利用SOCKS5代理服务器。 $ A5 ]- F9 [& j6 {5 ^

+ _: b4 d3 I" c* S( P一个支持SOCKS5协议的前端,通常具有两种运行状态:
8 j8 V0 k6 `* ]& X! L% ~1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
" k+ h4 p& r3 z5 {% {. Y8 Z的。 7 i; ~* Q* G' }7 a4 C* p
& X6 p. |& b6 p% ~) |4 }2 t) q
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 0 O( s  L6 }. z" L- E4 L7 y/ }
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
: ?2 _$ t% I  N, Y告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
" m5 G" b6 P' n+ ?' `0 `2 q: n5 w/ W服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
( \& B! m& ~& ?' ~5 S5 v' y) M- SSOCKS 5和SOCKS4相比有所不同,具体流程如下: - `8 O2 o1 L9 u# }/ j& m% g
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: ' v& t5 ~- j; R. R/ u( }/ O
客户端向服务器询问认证方法 / u% }3 [# Z2 G
-----------------------------------
, c% {3 J, l; Z  {# c: @) G字节 意义 值 7 [7 O# ~) l- D. _; k9 Q
----------------------------------- ( ?1 D, f$ z. A3 P3 Q/ o4 u
1 版本 4或5 6 n1 Q7 n; K9 G7 u
2 方法数目 * J! u, o- f) O; R
3-257 方法 5 }" N& P6 V* S
----------------------------------- - u" \- l; b1 C% u0 M
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% + @& x1 n$ ^( _* O8 n8 \
' `# @% F) H2 D2 O
服务器选择一种返回给客户端
8 a: q) B8 L1 x( x' @, v, Y% ]-----------------------------------
8 g$ |! p- D) |/ E) V9 O字节 意义 值 ( k0 P6 E" q8 s; Y
----------------------------------- 4 c; o, J+ [/ B: K
1 版本 5 ! ?4 B) n4 q7 q2 r1 r, k$ a, U
2 选择的方法 其中一种,0xFF表示没有可接受的方法
& D# o, W* T) P2 s+ ~----------------------------------- / D/ u2 c' b, W0 O7 T2 v# v6 [
- ~' e: O; w6 R2 Q+ ?$ K
连接请求
5 X- ]7 o: W1 C1 f( p9 F---------------------------------------------------- $ i/ X2 k* U- R2 c- d
字节 意义 值 5 s: H4 y# i0 t0 W) X) d% g
---------------------------------------------------- ! _9 |* \3 o/ q4 W
1 版本 0 + @7 H# i' }4 R- p5 s; o- ~
2 命令 1
, V0 v) C: S& o3 M7 b1 p% A1 y3 保留 0
/ w7 j% a+ I* a( w2 B) h# k# M$ R2 V4 地址类型 1=IPv4,3=DNS,4=IPng
) A! {3 d, w! R- J5+ IP地址或DNS名  可变
$ D# E1 J1 f! D# A% K最后2个字节 TCP/UDP端口号    可变 0 M1 ~: [1 K4 z( `
----------------------------------------------------
5 _& Z6 V' b0 h. m" o; R( L& U& C9 O" R. X/ o) y8 J
连接响应 7 F$ n. o  L; y9 R- E' B
----------------------------------------------------
! ?, ^; J5 W' n# Q" V5 ~9 i  `. D字节 意义 值
0 N+ J: A! ^5 Y----------------------------------------------------
) {, y/ Q/ Y% A- H1 版本 0
9 J7 A9 K; Q. M8 q/ _* N9 @3 U2 响应 00-08
1 z0 M) d1 [/ ^: q8 [9 k& n5 A/ e0 v/ s3 保留 0   ]- F, B8 k2 R  |0 U9 c
4 地址类型 1=IPv4,3=DNS,4=IPng
0 J2 r1 n( u: A5+ IP地址或DNS名   可变
" H5 S) P$ U8 S0 ~3 T最后2个字节 TCP/UDP端口号   可变
2 S: N  @. f+ `4 l" u0 A---------------------------------------------------- / [# [# Z' c" J1 U8 C$ Y
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% % g' x0 l" R! s4 F+ N4 h
6 |  B- K% I8 s$ i: [% m; S+ [
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: 9 ^8 P* J. g. U/ {" U
----------------------------------------------------
' ?) Q, M; W1 p2 j; \. |# s8 s- T字节 意义 值 ) p/ x1 U  V3 X- m( m
----------------------------------------------------
4 p0 Z5 p" k: r1 R, o( k+ ]4 T# c1-2 保留 0x0000 " k9 T0 H& y" \6 z( w7 c
3 分段数目 可变,0表示不分段
: `8 S& T6 K# T. A  C2 T& E4 地址类型 1=IPv4,3=DNS,4=IPng
5 D0 ], h+ Q  X# @" U1 ~5+ IP地址或DNS名  可变   B- l3 Z! F) o  S6 ]
最后2个字节 TCP/UDP端口号  可变
  n6 f, h) k9 ^: j/ [! I1 N2 I数据 用户数据 由客户端应用程序决定 2 i4 h1 e5 ^3 a, c4 ?0 l% n4 Y
----------------------------------------------------
9 K5 H- t" [, \( ?; e# N
3 ~2 M& }3 O, w3 @9 B9 Y7 JSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-2 12:16 , Processed in 0.019135 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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