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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 4 d3 b8 }1 V( i% J1 x4 R) i, g; o! E
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
2 L* D+ q* m/ X通常不必关心 SOCKS5 协议。 # n2 w, X$ D3 l/ D) {+ {8 I

- I3 Y/ L" v# pSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
% w: a3 P0 h1 W; u; K外部 Internet 的机器访问外部时,有用。
" P! y: A% u% s; b7 @3 g" c3 S% e
5 g8 N, w* g+ N. _0 z% B+ Z. ySOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 ) [- L; b- u4 T- ~2 V
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
" Q& d; x; M7 m! X3 v6 }0 O! n网中的服务器,或者使通讯更加安全。
/ w) r1 x+ }9 n0 P" r2 K/ V/ \; H! V8 k- K- V
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
6 S- n5 f" _- N9 W# ]一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
% E% |$ S4 Q9 O6 N7 C# I) |前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 ) a* _# ]( j: U, X- J9 }9 K
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
' p* x7 s, I2 m2 X的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 " H! O  f" O2 |
器的响应后,也原样转发给前端。 . e/ m3 z3 W$ P, {- Y0 i* W

& b  E' S& g5 H6 Y因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 ) \" {) ]9 u8 S* A% ^# [
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
  T0 d' G0 k4 @* `0 }是它能够忠实地转发通讯包,完成协议本来要完成的功能。
' \4 ~2 _" a1 Y+ A  k/ p; {) [2 Z  L3 M
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 : X7 e  C. u2 r
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 . J; t! Z% N. \! f" N/ x% s
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 6 _4 E+ X8 d. [0 H2 _6 h+ B3 W
* E% a% @% J; t, q* S" M' B
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 ) Q! @1 c; Z+ }- J3 e" C
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
1 t0 z' h: C% u: u9 ~4 i8 F此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 ! v4 `7 k3 j: s/ V% }6 a! M6 p
面。
5 y' w* ~; z+ |8 K
" T  Q7 f: u* w3 d9 O不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
, \  x; E, ?0 N9 ^地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
: q, f1 a7 F/ P$ R' I2 g7 `利用SOCKS5代理服务器。
  t9 ?/ h4 h% G( v8 y* a' j; X* j; B2 k4 i: v+ }) q
一个支持SOCKS5协议的前端,通常具有两种运行状态: 6 ^- v' @! D' Y! t: {
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 8 U" h9 y9 w* l% ]8 _# m  \4 q( x9 R: j
的。 % |. q8 ^% N2 k  A# b" U( m2 s
8 [# v) k- F" U. n. f7 D7 X
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
9 b# h/ l7 M, }, C5 P送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
) j3 ^1 ^# @; E告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
, {# x/ Q( {7 C/ O服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 ! [- ^+ C+ m  g6 n: \
SOCKS 5和SOCKS4相比有所不同,具体流程如下: ( K" b# A& i5 [* G* K, |
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:   @2 t+ @/ O" A6 W7 O$ j
客户端向服务器询问认证方法
; x3 U1 p5 E/ }$ \! S2 L-----------------------------------
( a# O! b" Z, N: N/ a5 C3 i字节 意义 值 : f; U: Z* h% ?
----------------------------------- $ ^  s! ]. @. T& F# S
1 版本 4或5 * n7 D% Q( O2 H1 A8 C6 R
2 方法数目
  i& P( Y: X9 N& K( `8 g3-257 方法
" x1 M1 F. S+ S( k7 S$ J7 W9 Q----------------------------------- 6 f( j3 _1 d  }8 Z2 e$ P
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
+ w. T$ F- z% `  e" ?; D3 ~: Q. q: j* I
服务器选择一种返回给客户端 0 W& h6 @* u  ]0 P
----------------------------------- / W/ |; F* H  s' X5 i) S
字节 意义 值
- V1 R. D* l* l5 J, [, n# ?----------------------------------- 4 A; S; W* ]2 a$ Q) W
1 版本 5 + X& W7 y5 u9 v% C
2 选择的方法 其中一种,0xFF表示没有可接受的方法 4 |$ m1 a( v& ~' F
-----------------------------------
+ ^8 E# L" S+ b5 V9 ?3 F$ [2 t/ M: x) C+ ~3 f# k, p! J6 M4 R8 I
连接请求
: Y3 n: _  R0 N/ s----------------------------------------------------
9 [  p  u. f$ `9 X字节 意义 值 1 M$ r; F, Y* t1 K
---------------------------------------------------- ( ~/ G# V5 J, J6 y* a7 C
1 版本 0 $ H3 C; l5 g* ?1 {7 W$ V8 l( L2 M6 L
2 命令 1 4 P7 T) ^7 |2 e9 N9 M" w3 ?
3 保留 0
  I5 [0 |/ p# o8 G2 I* L* A* x0 Z0 W2 r4 地址类型 1=IPv4,3=DNS,4=IPng
" D9 h/ X; J. ~4 f2 }5+ IP地址或DNS名  可变
# r5 }( r+ j* j最后2个字节 TCP/UDP端口号    可变 + ]/ g& X) ?8 {) h# u/ V- L4 m' n
----------------------------------------------------
* [" c& f$ h) p$ ?+ D
" K( `; _/ n0 @; t, S& J连接响应
! L$ ^! y6 w! @8 Z----------------------------------------------------
. d% W7 @: {; e字节 意义 值
% K9 ~+ M0 Z# a, M---------------------------------------------------- : I- H( j3 k, G. d
1 版本 0 8 j% J. d# G  H, m% \7 w
2 响应 00-08 # [( e* {0 @# ?/ H+ f/ m
3 保留 0
$ F7 U. R1 S$ x! Q( Y4 m0 }4 地址类型 1=IPv4,3=DNS,4=IPng : G7 Y. `7 H4 C% w
5+ IP地址或DNS名   可变 " y* `' h1 s" i: f$ A! W. V
最后2个字节 TCP/UDP端口号   可变
/ w6 k" B5 W/ @---------------------------------------------------- 9 ^; Z- \+ L  `7 A4 v! N
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
5 q0 E7 k) I; z: @2 a
, x1 ]) ~9 g1 w' ASOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
% r  \& Q. P. x7 B----------------------------------------------------
, b8 s9 d# ~# ?) g* f字节 意义 值
3 H4 e. Q+ ^& x: e/ F, g) M0 I/ y7 N---------------------------------------------------- $ @, O2 J* n% J8 R0 c
1-2 保留 0x0000 8 `: ?5 Z7 d  U6 M" r! B) E
3 分段数目 可变,0表示不分段 9 O; t2 |: o/ s5 G" N# p' M
4 地址类型 1=IPv4,3=DNS,4=IPng
$ U* d" Y$ T; m4 K5+ IP地址或DNS名  可变 - e0 X3 Z! y0 e
最后2个字节 TCP/UDP端口号  可变   ~: v& s! E0 K; a0 G
数据 用户数据 由客户端应用程序决定 2 w) v# _: C, V/ N  R( a
---------------------------------------------------- / P6 V- Y& N0 n0 \9 W0 \  E

% n9 K/ Z1 D: X3 SSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-30 13:01 , Processed in 0.037630 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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