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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 6 H9 }4 Y1 v; m" T# ?/ X% w
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
* e0 d% E* z$ X7 \  s* r5 E通常不必关心 SOCKS5 协议。 # G9 l! [" j0 z, ~; h/ m6 y7 y

0 P1 v* ?" p9 _6 zSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
( h9 g% X% n, {外部 Internet 的机器访问外部时,有用。 ' A  @& p) `2 @

8 u; Z3 [/ \) O9 i6 bSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 $ z) w! N) \5 w3 H: t1 n
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 6 R' h. I" o9 [! V8 ~5 s: L0 k
网中的服务器,或者使通讯更加安全。 0 c5 C. G- X9 S  \  F
2 V  l7 Q$ m( v: i& @
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 : n# v* U  u8 H6 V+ A2 M& h, d9 ?
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
! P8 J; ?5 J4 _4 P4 L6 J前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
. X- x' ~/ B5 T# r! m% `" c器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 ' O+ @6 X. u) v) ^; g8 y2 @% ~. U
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
5 X8 ^+ r* t$ G* u5 U% I! X: i5 \器的响应后,也原样转发给前端。 1 l( I- l; D& K. p7 Q9 b# ~
( v  F& o1 x- t7 O' W% c: ^
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 ( G# @9 x; Y4 P  B! S
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 * M7 q, s  I2 [* v* [% S
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 ' P) m$ E4 {8 Q+ C' `

6 |+ _6 N: f& z- f1 e与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
, q$ {/ A+ k2 Z2 U: I& I件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 & e- X1 n8 O7 q- O3 w( ]& ^4 N
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
7 v  n( R1 N% m) |1 z0 S) F, N: n. B$ G
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
1 \7 S  E9 A  Q  N办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
& W& k. S5 t4 p* B7 i3 Z$ ^此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 8 C! u: L: Z, G7 P! h
面。 + g1 D% k7 Y- r. M* f7 W1 I' L# W
- v" l; M# B6 g
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
) D; q  o. A/ y5 |6 f7 C地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
6 D- O7 P5 h- H5 I利用SOCKS5代理服务器。 2 b1 Y# s2 B! ]7 [5 C- S" A  R3 N8 W
* M. g+ |% C" Q0 G
一个支持SOCKS5协议的前端,通常具有两种运行状态: ' i) K0 w7 I9 ?/ C* j$ d# a# E/ F
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
$ k9 s+ U5 p+ E  c' f7 m的。 4 U, ^. p. f% ~4 e

0 y8 |: s# E1 P; N2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
8 L2 c! u  H; P9 y送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 & C. z( F* l: U; ^: U4 \
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
7 J; E3 g7 {' t8 T; M# Y" |服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
/ n, l5 M$ z, ~) W( v, A: V- Q. CSOCKS 5和SOCKS4相比有所不同,具体流程如下: 4 f$ M2 E+ x( o9 _. G: E
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
: B! R5 k+ O: n% w9 U' i$ X' T# h+ W! T客户端向服务器询问认证方法 1 a' m' v( q' t6 T, \9 V! G
-----------------------------------
& s1 T5 H6 d( z& ~, v$ o3 _3 R字节 意义 值
7 u; O0 E3 }) I5 H----------------------------------- ; p  H1 y5 J6 ?+ u. Z7 L
1 版本 4或5
$ \% k$ L# ]4 y( R2 方法数目 # ^) m, f: E; b7 z
3-257 方法
/ t) O+ v. E8 o$ b* x-----------------------------------
2 g8 e8 H0 H3 k' @6 E& H4 _: K! r%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 8 L: N8 x' N) f2 I+ o( V$ F5 _

2 R# I1 A9 \' ~1 M5 ~服务器选择一种返回给客户端 ( I! J' ~  c2 o7 A0 j
-----------------------------------
8 C  w  \- D/ s- e/ i" U字节 意义 值 & z& s# c5 W& `: F  y; i3 z$ [+ Z
-----------------------------------
4 ~& K8 v: H, D4 Y1 版本 5
: i# {, Z7 K/ o  ]0 w2 选择的方法 其中一种,0xFF表示没有可接受的方法
8 \& F1 |  y* X1 ~9 z----------------------------------- ' @& l( b- r) e

" r3 ^, Z* F3 j6 V$ y% s+ f连接请求 & f% X1 y* X* x6 q2 p6 S" G
---------------------------------------------------- % t. _1 V# B  J/ I4 q% a
字节 意义 值
% [0 g9 H8 r* X( j. c---------------------------------------------------- ; \' w8 p+ p4 x* ^) @
1 版本 0
- K5 W' |2 |+ q$ O2 命令 1
" m. ^4 T* Y6 ~; y& M2 s' x3 保留 0 5 `  G4 @+ l* M4 {* o
4 地址类型 1=IPv4,3=DNS,4=IPng " d( E$ E) E0 _! o; b4 j4 H
5+ IP地址或DNS名  可变
: e8 F3 ~0 g( b4 I最后2个字节 TCP/UDP端口号    可变 + \6 t  r1 b7 w" \! R' i6 D9 Y
----------------------------------------------------
: t  Z6 P5 C. b* y$ Y* `2 {6 X9 y# E
连接响应
) C- R. B+ |( H5 o2 c1 E---------------------------------------------------- ( z7 T% G) W& }  h
字节 意义 值 3 _6 z4 E9 F7 o. f. ?' p. y3 H5 R
---------------------------------------------------- & M  v8 c3 H3 i  z
1 版本 0
% T+ J( I, M8 X8 v4 o2 响应 00-08
+ A0 g) O# @. {3 保留 0
/ p/ ]2 K7 k3 e* N4 地址类型 1=IPv4,3=DNS,4=IPng
  l4 `+ L  m( J" ~5 l5+ IP地址或DNS名   可变
# I8 j! T+ O, S最后2个字节 TCP/UDP端口号   可变
. ?1 b3 `. p: \% _----------------------------------------------------
% N* B" K! a5 n) r响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
2 K1 _! G% ^* c6 G
" i. E8 k+ h% _% vSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
0 A" Z: ]4 R7 a0 A----------------------------------------------------
- e5 M2 V: u# x0 L字节 意义 值 ) F5 ~+ i% Q- M4 Q# N" Q# Y
----------------------------------------------------
5 `* y' ^$ ^6 N; J4 R  _1-2 保留 0x0000
/ r4 c5 H" `2 J% `  h3 分段数目 可变,0表示不分段
, _% F' p" n. s2 n1 g4 地址类型 1=IPv4,3=DNS,4=IPng
5 V; q& Q. p9 @5+ IP地址或DNS名  可变 7 Z: F4 F/ k/ ]8 g
最后2个字节 TCP/UDP端口号  可变
3 x+ e7 f# ^- e" a# O" C3 r数据 用户数据 由客户端应用程序决定 9 C& J( y5 U1 L* E1 j
----------------------------------------------------   g& p/ Z7 G+ d# M) Y

( y8 @* r; R. [+ a4 K+ G+ Y' xSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 10:12 , Processed in 0.019353 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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