找回密码
 注册
查看: 5941|回复: 1

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
% x) i7 \6 T& f; @/ y上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 0 w6 ^* x( w# B* m0 c9 [' E1 Y
通常不必关心 SOCKS5 协议。
( x( T! e0 ?+ F6 n" |8 R/ o& ~' s0 [2 {  X
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通   E% w# `% A* D  p
外部 Internet 的机器访问外部时,有用。 : }5 A$ [4 a, C/ M% d

2 ^0 m! G3 v/ ^1 R9 KSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 & m  K0 ^+ C# a  C0 L! l
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
8 N7 d5 Y; r/ v+ F) F网中的服务器,或者使通讯更加安全。
- {( h: Z' h- L
+ n5 p4 q4 I  \  @SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
6 x3 {  B5 N0 d8 O1 j8 `一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
6 Y# {3 z# P+ `+ m; s; S7 s前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
  z' Y3 a9 Y; Q器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
, O7 {7 M, N3 ]2 L9 G的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
, a4 R; K6 m- c( u% B8 Y; v$ o* i器的响应后,也原样转发给前端。 * x* m8 y# @5 U- j* z

1 T! r" `( F) T; Z4 q因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
4 N  @; f$ G' f, [都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 4 x/ |3 X& ], b, t- H
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 2 D3 D( ?! g3 m4 S

/ l( u+ a  p* ^与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
- [1 N1 g% L4 t1 g件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 5 r2 C  J. s5 k& j
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
9 v3 G' u1 g& t0 s- P* [- K3 V" R# p% H
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 : ], r1 V& p, l! v* v# Z( E
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
7 E: z  P) a7 T此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
) R, {3 Y8 t4 z7 W3 P# C- ]8 U; O面。
# w2 H6 V: ^1 R3 I
" T6 y& L0 P* I6 K不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 % X. [! G+ f+ Y! s
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
) X3 M# N* W8 I+ e1 o利用SOCKS5代理服务器。
( g* x7 f, b6 Y. |6 j/ f+ q4 U* x6 N2 z, T1 G6 i2 p; f
一个支持SOCKS5协议的前端,通常具有两种运行状态: + r+ B" w  @! |; W7 q/ ]+ H
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 3 O- u' T. `" n
的。
8 C% s7 v: i; J% b. B
/ z: Z8 z2 }2 N1 ^7 \8 K7 z2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
( n3 s8 m2 C) c& D& d: [; O送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
9 a( c$ f: e. L$ U) N% m0 _告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
* o) Z& A* U6 N9 a, Q1 ?  X' ?服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 * J! M2 d* K9 x  b# d
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
, M$ @$ [% R- P. J) B三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: $ i, [2 F' I+ g3 B: C7 y" ~
客户端向服务器询问认证方法 ! n" G% ?8 B1 X/ p) o) C
----------------------------------- 5 l' [, P$ ?5 U$ f" g3 o
字节 意义 值
: J) y2 x) q, `/ k7 q' U, I----------------------------------- . [  G  ?: ?% A5 g2 Q
1 版本 4或5 . A9 \; A! e1 ^( D/ q
2 方法数目 8 b3 ?- P  s" [( M* Q3 M5 [* V7 T
3-257 方法 - Q3 M7 |2 V. X: D! R
-----------------------------------
! |( U8 B7 T* T8 q%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% . a( R% I1 O0 R
4 W: T2 u. }, h5 c! O! ]
服务器选择一种返回给客户端 + e) ?7 o9 q+ ~+ Z# o$ u0 v& w# P( b
-----------------------------------
" H3 f. [$ S0 t9 A' Q9 \! x字节 意义 值 . D: C: A2 B" b* c2 q- J: }, t
----------------------------------- 1 ]7 j) h, ?& l  \+ }& {5 ~, P
1 版本 5 5 j$ @: X7 ], z4 v9 L
2 选择的方法 其中一种,0xFF表示没有可接受的方法
4 H' U: x  ~# A$ N: @( I----------------------------------- # g1 e8 E+ m* f

* p0 v) w! {+ P7 }  x连接请求
7 E; c2 |( r0 a! f5 o: {* V( n0 A, X  ~---------------------------------------------------- 4 T/ {% u# k, Q5 N' Y0 u
字节 意义 值
! c; \* h) a  h4 L0 y0 C( Z----------------------------------------------------
. E/ \6 Y4 e8 K! Y4 g6 C9 y+ H1 版本 0 - p4 z2 o2 ?$ G5 O& U/ a8 x
2 命令 1 4 g6 U0 l4 Y2 ?% |5 P
3 保留 0
0 @$ n9 X/ K6 z& u4 地址类型 1=IPv4,3=DNS,4=IPng
8 p  _7 u% O8 x/ i% c5+ IP地址或DNS名  可变 7 ]! O1 g8 k7 N
最后2个字节 TCP/UDP端口号    可变 . _  }3 r% ?6 Z. e
----------------------------------------------------
+ p$ ]: \8 X( _1 r7 r6 D4 z. C4 j' V4 |: d- l) u! l
连接响应 - U% B+ ?  J. _2 o( k0 I
----------------------------------------------------
$ g1 X% c# q% U- l字节 意义 值 * C% [4 d3 z4 g% b, t6 T
---------------------------------------------------- $ x# b+ z1 _: x
1 版本 0 : f; ?4 u" C8 @4 f' h. T
2 响应 00-08
% c0 H1 ^) V3 P* w3 保留 0 0 e3 ]; r. Y( ]
4 地址类型 1=IPv4,3=DNS,4=IPng
3 T' v3 F: K  i5+ IP地址或DNS名   可变
$ {0 _0 O: ~! x最后2个字节 TCP/UDP端口号   可变
6 k. V; D9 D+ h  Q, j) j----------------------------------------------------   S0 m- B# Z+ G, P. h
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
* g' {; {0 c& [
3 \* e$ p, [/ r' g$ y0 |SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
6 x& N" @5 ?0 ]3 u% j6 `. n# G---------------------------------------------------- & ^3 U9 B( j* ]: a
字节 意义 值
( ~! C( Z8 Z) f" H9 [( q---------------------------------------------------- ' j+ N6 W5 i5 \* P1 a; s: t& O
1-2 保留 0x0000 ' I* ^# r1 [% H" N
3 分段数目 可变,0表示不分段 $ T& P* |4 O8 u$ u8 H
4 地址类型 1=IPv4,3=DNS,4=IPng 9 f2 ]/ B; x. a' m; V
5+ IP地址或DNS名  可变 7 [, x( a  f8 T: [) p; N: o
最后2个字节 TCP/UDP端口号  可变
( p- T1 L3 [2 p' e数据 用户数据 由客户端应用程序决定
, B% Q3 ~5 Z/ Q---------------------------------------------------- : C$ Z6 F3 e  S3 S% K4 |3 ^6 y

9 l: {7 J  G( D3 N7 GSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-1 22:03 , Processed in 0.016372 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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