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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 2 b3 m$ P' U8 P) |, w) K6 P
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
! q( D% w0 u+ v7 E( X; K通常不必关心 SOCKS5 协议。 7 r: S2 @( C/ I( b8 T$ R: v4 V
' P5 h7 r. ?  j1 `& g! m7 H* v$ m
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 : t$ p; `/ N# U# S* P+ \! n
外部 Internet 的机器访问外部时,有用。
$ {1 k+ ^  m% w& j
5 z: z% t9 L/ BSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器   C9 Z9 a2 {9 j8 J5 c
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 1 V4 Q; M" i6 c# c" j( `; ^
网中的服务器,或者使通讯更加安全。 4 F( ]6 b9 v5 F. m$ h8 x

9 }3 `! X* |# l. LSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 , m/ ]$ O3 V+ Z1 C) o9 R" D
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
! t' N" J; B4 h; o6 L前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
( C! [, ?( f) O6 J4 V3 g0 J, ^器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 # _8 P* y8 b  [  ~+ s7 Z
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
1 Q( l8 W6 ^4 s* V, A) ~器的响应后,也原样转发给前端。 8 H) P- j0 S) U: |/ K
8 j# v: d8 j" \+ u+ `
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
4 [. |9 P# A" X0 a6 d8 v都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
5 ?0 G) E; m5 u& z6 D- {, N; G( l是它能够忠实地转发通讯包,完成协议本来要完成的功能。
+ W/ g. i1 T, B7 \% D' ~
" n' Y% H1 g# n) L2 t+ l2 m与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 . b8 j0 A$ o% s  ^- ^4 ^2 V' W$ i
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 5 j: b1 K% c* R- b, _9 y/ t' I) L
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 : e: Y+ g, h5 d: d" `$ q* h
( \" N' S- s- s% p, i! R; x, v% Y* r
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
, r: {; B6 k- l办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
. k" u; T0 E+ R/ ?: l9 h2 Q, w此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
2 i  ~  K! T9 A, L" {面。
4 f  \2 l& C5 e" e3 i1 n3 f
( j) C' s" Y" p7 `. ~& \: Z6 \0 b不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 + C1 U: Q8 i/ @  n/ L# e
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
" l0 Y( w8 M; i利用SOCKS5代理服务器。
9 o; F7 t$ _; s2 Q! m+ V/ q
. V% M1 e: S; ^7 E一个支持SOCKS5协议的前端,通常具有两种运行状态: # }9 B5 D( m% r5 E$ X- e8 s
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 , Z  [& c! l, T. c, P; J+ z5 g9 b
的。 # }+ f* ], z, D3 H! p2 X& ~& o4 j

0 O" ^, f8 D- Q. |- ]$ M9 u2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
% d3 J/ K6 _8 P, L& l# C送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 " r( Q( o" B8 H% A1 G
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 , s8 F& X; o. f
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 + [6 s4 M4 a5 I+ @6 a/ k
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
: U% e; b; A1 _; V4 {* U0 n3 X: \1 E- S& }三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 8 ?) K9 b6 w# q" `' B3 Q+ Y
客户端向服务器询问认证方法
/ c1 g, L3 Z! p% B* t----------------------------------- / c. ^, M! ^' W3 o1 n4 W; U4 v" m
字节 意义 值 , D' `9 L' e; a0 W
-----------------------------------   P% e% n" Z2 u# T, k8 F
1 版本 4或5 * e+ U) v9 Q3 b* b( S
2 方法数目
  t* o7 n9 T0 a" D' t3-257 方法 4 q8 b1 n* m' I# W
-----------------------------------
7 N5 h" s, Y- E* V! O6 O%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
# t# ~3 H- M! l! U5 T& x2 i9 q8 Z- g% k
服务器选择一种返回给客户端 6 X% f- D1 A5 d7 u( I
-----------------------------------
. X% V# n4 F5 e字节 意义 值
) P. m) u) t6 [% o' ~$ J  I9 U' @-----------------------------------
: c( P% `/ r' H' G0 K1 版本 5 - G/ r( }2 T8 C8 }% J( Q0 w0 k
2 选择的方法 其中一种,0xFF表示没有可接受的方法 - W: Q2 \2 E( R) x
----------------------------------- + Z# \* G: R& g: T$ X- I' v5 G( |
" p$ |9 j" F) J7 i
连接请求   ~- P# _2 E. z
----------------------------------------------------
9 `1 P: X2 b8 U5 p7 m& r字节 意义 值
9 T3 i& S9 D5 c. J6 [---------------------------------------------------- " P1 A, C- b8 r9 L* h2 W+ |) j7 [
1 版本 0
! a$ V0 Y: [3 c2 命令 1
; |5 o& I7 O# o' ~% E% A3 保留 0
' b4 r: e: u) Q7 x4 地址类型 1=IPv4,3=DNS,4=IPng " @, ^8 ?9 F5 J- u; f
5+ IP地址或DNS名  可变 ) a) k2 D8 d3 O, e- r( u, [  h
最后2个字节 TCP/UDP端口号    可变 * ]* r/ J5 A0 O. g) C+ }/ B0 x
----------------------------------------------------
6 ?! J( G# x& L4 H
1 k( x% v6 @7 w" R, Z1 h连接响应 / W- K. H5 M  W( k) W4 }
----------------------------------------------------
6 B  F# {' |0 `1 g( f3 M& o: i字节 意义 值 ' I0 l5 |. n4 W* F
---------------------------------------------------- , B: R9 ^; k% M4 n/ L- a4 I) C' }
1 版本 0 2 l0 m  Y6 c$ j3 t3 U7 O1 A' J
2 响应 00-08 8 o6 k( |, ?9 Z
3 保留 0 / m% P+ e* [2 W5 x; e/ P. s6 y
4 地址类型 1=IPv4,3=DNS,4=IPng
/ W. J/ v! y6 j% Z& Q5+ IP地址或DNS名   可变 0 G( f% r6 \" P& ~! s2 _8 l' j
最后2个字节 TCP/UDP端口号   可变 1 T3 D. k: q6 u( {
---------------------------------------------------- $ q  H, F3 e1 b
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% * q( Q: q% L& c' k, g
& c+ [) t/ I5 [/ L- X3 l7 R* ^$ V' Y
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
2 ^" E  {, c2 ~( }* V& N2 `----------------------------------------------------
# ^" m0 H9 D% S- f字节 意义 值 * ^7 o1 x* T! T
---------------------------------------------------- $ x( y( R7 K$ d0 `
1-2 保留 0x0000
  Q6 [3 {  ?% N3 分段数目 可变,0表示不分段 $ C4 S+ Y. M# C/ a( ^% R
4 地址类型 1=IPv4,3=DNS,4=IPng 4 {/ T% F9 O; n1 @+ b. ]3 D
5+ IP地址或DNS名  可变
, c+ Z- ^! b6 g1 m0 z3 u最后2个字节 TCP/UDP端口号  可变 . v9 R0 Y) u% ]) Y: B
数据 用户数据 由客户端应用程序决定 4 k. k! Z/ ^$ j9 v7 r. ?" Q
----------------------------------------------------
" S, g* v/ v1 X( F8 [1 @0 A. ~5 V9 [/ \, E" Z
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 02:33 , Processed in 0.014641 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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