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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ( [. w: h4 s7 Y' D7 e) u6 q
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 # q! J" E" t' O7 `4 I; U% Z
通常不必关心 SOCKS5 协议。
! m! ^1 g2 A3 r  Z" Y4 y: m, q* }9 p! n6 U
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
7 I& c& O+ c: g1 [* v. g/ [4 j外部 Internet 的机器访问外部时,有用。 : x. K1 o. T; w

7 B& o- F7 J: y9 s& cSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
" ~( m' ?  s' P$ ~7 ?$ Y机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet ! `1 _1 ~7 {6 H7 I, l
网中的服务器,或者使通讯更加安全。
8 C3 r) ^& d, H& F& P/ X0 r+ x6 Y8 l4 S
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 : T. b6 S# k5 d+ G  W+ l
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, ; ^4 v( e# I/ r# k: J5 R
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
; n4 b% Z9 W7 v6 a& }- O器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 9 |! @# h8 X" [; _6 X6 D
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 - O6 v0 U+ ~; Q. p3 m) s: Q) u9 b: c
器的响应后,也原样转发给前端。
( K! u* e7 ]! M, @4 g. Z) g3 ^) P& e& q, s/ S, r8 X2 N
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 & f1 B* n$ Z6 B% ?
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
* O; E7 b6 X6 E/ a) ^" l& i& @' {5 f是它能够忠实地转发通讯包,完成协议本来要完成的功能。 . l$ b" a$ |+ X9 _7 F  U/ x4 O/ ]& \
  E5 |/ F  C% X5 O  l" t
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
  g# e! z! J: m: k件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ' R5 Z1 k3 Y" m" m
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
$ \$ V7 l: K; ^) i* r% x% O9 k6 x7 Z! b
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
0 ]: R) e! n9 A  H" f( ^) X& Y7 t. M办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 ! K0 D2 ^8 k3 p  @
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
6 F7 v  o2 X# l' R7 R/ y+ @& E面。 . `! k$ Z: v2 L3 A
- L# x) ^- r4 F. @/ w8 z/ H
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 , I9 Q3 v) |3 b% O
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 & f4 D% ~6 y. l1 n% q& |
利用SOCKS5代理服务器。 ) O2 r$ u2 h* j$ M5 c0 s9 b4 e
/ v) J  D) ]- J  Y. l+ J7 ?- e
一个支持SOCKS5协议的前端,通常具有两种运行状态: ! Y2 {& ~$ M9 x
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
0 a7 x# D" V: ]9 A0 k: j的。 2 X' G: |9 y3 Q5 s5 }9 C
) c8 L+ W. b  V) n
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 * C) I! `1 k1 t' }+ \; J
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 $ w7 E$ o- A* G! R
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 % @. S% r) q7 J9 }! ]  R
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
, \" V1 k) d4 R- p0 i6 VSOCKS 5和SOCKS4相比有所不同,具体流程如下:
1 S- o2 ]' z& S三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 0 j, f  z* q( ^/ ?- X: i1 I+ U* B
客户端向服务器询问认证方法 $ W6 R, b4 m+ s5 R& X. {0 b% p! ~5 O
----------------------------------- & |+ h2 B& _# e6 i. y' L
字节 意义 值
: C5 Y) P1 r( C; A$ S2 H8 E$ o----------------------------------- + y+ S; \" H7 c1 V; p5 O
1 版本 4或5
' h* W4 U2 A6 x1 y. Y: d1 P' _$ z5 y2 方法数目
4 r8 {  y9 E9 D2 l$ M3-257 方法
" q: Q2 s1 ?8 h& k-----------------------------------
) W. J8 ]; U% J' F& S0 k4 y%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
0 p& l6 `4 z* O* c) s8 G/ D! f: |, x" U% F
服务器选择一种返回给客户端 # z$ N; J+ E& a
----------------------------------- " K# G0 Y& [; M, b  h2 y
字节 意义 值 # V# ]; y3 J3 C  c( G. F. U) j
----------------------------------- ; {0 z1 n, K1 j# l+ T1 {! d$ c
1 版本 5 - M, a7 H: A! [2 u! P' ?; G
2 选择的方法 其中一种,0xFF表示没有可接受的方法 ; C: B) u7 l1 c2 y* H) w5 O
----------------------------------- ' ]& E! X( u! h3 K) z3 ?9 M( V
- G+ m: m+ T1 X) {# G
连接请求
$ s( V! [7 V% g" o+ y4 y---------------------------------------------------- # u1 s) ?2 u7 A8 R* Z
字节 意义 值
, S0 p/ _! e# y  O2 @( z----------------------------------------------------
# `1 D  u. h7 A8 ^9 g6 h: N1 版本 0 ( Y0 ^! _, ^1 z: I4 r
2 命令 1 7 R8 a: u; G9 k) }4 M
3 保留 0
, X; j7 K8 M. b4 地址类型 1=IPv4,3=DNS,4=IPng
5 z4 F/ ~' h1 W% x8 D. p5+ IP地址或DNS名  可变 ! C. W: b; Q/ B  C  Z, U" A* _0 @
最后2个字节 TCP/UDP端口号    可变 7 K* s9 ?% w$ X% c% L1 d
----------------------------------------------------
4 j0 _# Q, ?& T/ ]0 [
" s: _, R/ b# B! D7 c& ^* @4 ~连接响应
' `8 H; Q) R: R---------------------------------------------------- % M1 W; v$ l' B+ _; v. |
字节 意义 值
/ M) o2 h5 M) Q. y7 e----------------------------------------------------
$ v* W/ W, u6 Z. H  a; \% ?1 版本 0
5 o' B! U3 q) c, ~; o4 P2 响应 00-08 * \+ Q. [  R( H6 T! r; e
3 保留 0
& F$ B) @$ q- r1 G8 \: t% d+ C4 地址类型 1=IPv4,3=DNS,4=IPng / z9 s- D; S' v
5+ IP地址或DNS名   可变 2 W7 Z7 [0 F' x, V! x' v! b. k
最后2个字节 TCP/UDP端口号   可变
  Z2 R! t0 }5 j; N---------------------------------------------------- " e' t& w! C- B% d1 r& B3 p- w9 z
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% 6 P6 `! n6 P/ K; _0 M6 f! p0 ]( D
6 b/ ^3 I. x0 N+ z
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: * ?- K1 ?  s6 U) A6 ]8 Q  l) ^1 Z
----------------------------------------------------
% |8 `8 I+ w- C' N- J. k字节 意义 值
4 g) H9 z  u. S! d----------------------------------------------------
' H. Z5 W- O4 n6 G1-2 保留 0x0000 # s/ o% c/ a* Q1 y" x0 U
3 分段数目 可变,0表示不分段
: T1 [9 y& j# V5 Q( ]0 b1 T) w  ^1 Y4 地址类型 1=IPv4,3=DNS,4=IPng
9 ]1 ?) A, G- Z0 e5+ IP地址或DNS名  可变 % u7 I( }8 a. v
最后2个字节 TCP/UDP端口号  可变
# Y! r, f  ?' r% x  J9 c数据 用户数据 由客户端应用程序决定 8 N+ I  F+ b' D: c+ L. t
---------------------------------------------------- 4 l9 U- z2 Q2 b7 K
' ?* C" X  x8 w* Z+ r5 i
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 05:50 , Processed in 0.034981 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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