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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ; ~, H% l9 |) w# m6 b: z
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
6 m" H$ L0 x. {通常不必关心 SOCKS5 协议。 . x! H7 \' P- a

) ~1 M( s( c1 _6 ~4 z5 ^SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 # \/ q9 O5 K" e) i0 s: j) r4 n
外部 Internet 的机器访问外部时,有用。 # {' ^3 ]0 b1 O9 {: P) L% i

  l. x+ B: s$ {: u5 _SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
- l# Y, o1 N5 l" v4 j/ `8 g机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
. S! G3 X) G3 {) l9 U4 d网中的服务器,或者使通讯更加安全。 % ]  n+ H: w4 C
, l& y! z; s' }3 \5 M
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 ! L9 s8 F. Q$ ^0 g7 r; f) p
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
, J" h4 N0 t& {前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 ! \# k  [  D2 W' {+ _' N
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
0 {& j; p6 z& ?6 o" m的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
, y( v2 H0 z; z1 r器的响应后,也原样转发给前端。
9 p' D# Y+ _4 r. j/ {8 Q1 K* B8 S# i2 T- Y5 P
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
/ c, p" H  z/ Q/ n' V都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
: R0 V' ]0 C" _0 P9 r& Y. [$ R是它能够忠实地转发通讯包,完成协议本来要完成的功能。 2 \. J( e- R# b7 ~' u  h* `& c
# n( S- y- m1 W" h& E
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
3 B  o! K8 a  ?. X* ?3 a件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ' k" K5 A/ p( x7 n- M0 @0 f
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
; ]- a( j: B/ \: L7 ^5 g! @2 g$ H% I  e' ^9 J1 z! r/ j
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 ) E, g* _$ [" l2 W( N/ C: Y: i
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 4 d) J8 X9 G) \, O2 A3 t2 b, o: t' }
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 $ W+ S. {: r" p+ \
面。 ; e7 a& D3 F) S  J, [

8 u! A7 O1 O5 p- @' ]* z2 @不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
5 a/ L) V( ?+ S( R* q' u% H+ e地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
. s/ _3 G0 r$ l# H利用SOCKS5代理服务器。 ! k& r: E3 h& O1 _' d2 C; I9 i5 I/ w

8 G) g7 Z2 d3 ^6 a5 }一个支持SOCKS5协议的前端,通常具有两种运行状态:
/ }- q+ ~: R2 \" D1 P. S2 h5 R4 J" G1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 6 t4 s/ L3 f, I- u2 B3 a% x# b( s- J8 d
的。
  `& s2 q/ S$ h, `' G# i
3 @+ T" K/ z2 s- r  A! @2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 ! `8 j/ J6 k0 b4 }6 ?( X; Z
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
& l6 x# |) T; W$ A告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
/ y. l  v4 [( P# f( x服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 . S8 m5 s3 K, z) G0 ~1 ?1 y# [
SOCKS 5和SOCKS4相比有所不同,具体流程如下: 4 w! p6 i3 @, _& ]5 l
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
8 I  O' }# Q8 B: T客户端向服务器询问认证方法 & F- T- \% |; G+ H
----------------------------------- $ t' Y- `6 @# F3 s4 G
字节 意义 值
$ f" Y, p  U8 a) X/ F# t----------------------------------- $ W, H2 y# t( t5 d( q9 t! t
1 版本 4或5 ( Y  Y3 I, k* F# @" j( j
2 方法数目 2 ^1 U& R! g6 K1 D# H# `
3-257 方法 * m; q% Z1 q! X; D; c- A
-----------------------------------
# c" t. ^* {- ^- ]3 D9 u1 y! d1 _%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% & N; y- E2 E" [$ H4 ?

( q8 t8 I9 Y6 K4 g6 w服务器选择一种返回给客户端
. g1 j( v" t( A7 Z-----------------------------------
5 F1 c2 Y6 O) }$ g/ V  Z字节 意义 值 # q1 g( J) ]' n+ q
-----------------------------------
# c& T/ f. t7 N, B8 k: Z" ^1 版本 5 9 K  x6 f4 [, P" {. P# V; r# y
2 选择的方法 其中一种,0xFF表示没有可接受的方法
0 E" D( `% j2 x! \& V9 Q6 ?  H- a-----------------------------------
3 a2 J& M# o4 p  s- W
' z3 q/ ?* m) f6 N. M连接请求 3 h* H! U( y/ W% a+ @
----------------------------------------------------
! ]1 |( H" t4 F' k字节 意义 值 8 m* _# ?: s& S/ G3 U! f. {+ ?
---------------------------------------------------- 0 \9 B1 X! y5 T: c2 C4 |5 F
1 版本 0 2 C9 d7 j2 K2 ?! i
2 命令 1
( c/ v5 ~0 F  x  H5 i: H$ L. k3 保留 0
6 k# t, H& @! X, _7 f1 ?4 地址类型 1=IPv4,3=DNS,4=IPng 0 i; Q# {  W7 l8 U' Y; A
5+ IP地址或DNS名  可变 9 D8 s% }- X/ P' |2 @& e$ n
最后2个字节 TCP/UDP端口号    可变
* c# e8 v# @2 O0 c----------------------------------------------------
5 s+ X2 o( c% [7 Q
* `# }) o7 t; C# E) f连接响应 8 W" H' T. k7 I8 Z& L7 a: w# q* g
----------------------------------------------------
; A- i* K2 a. K6 ?字节 意义 值
5 S% C& E& T# g  a$ x! h" E----------------------------------------------------
8 l# ~% f5 G2 d' Q3 f# f7 n8 L1 版本 0 * _6 y" p( F. C& k9 x
2 响应 00-08
$ t0 N) v2 G8 G  R5 c- M3 ~6 E3 保留 0 : a0 h* F; h9 x: x* Y5 E
4 地址类型 1=IPv4,3=DNS,4=IPng * n1 C1 |& c" \1 J9 N
5+ IP地址或DNS名   可变
5 Y, {* [1 M( C/ @最后2个字节 TCP/UDP端口号   可变 " ~( _$ t  l; l) u: \
----------------------------------------------------
0 |4 K& _0 K5 M! d0 ]响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
/ U* j  A; ]7 p7 s9 l& F$ W: h# q) P
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
3 I) G# p' y) s----------------------------------------------------
% b& M& a5 x" G字节 意义 值
* F& Y( r; b+ R7 K# q----------------------------------------------------
$ R: g5 p# D- K2 i) z1-2 保留 0x0000 % Z" z. w; Z% `9 V
3 分段数目 可变,0表示不分段 % I- o4 A' g' n9 ]! |7 f4 T$ l" f. N
4 地址类型 1=IPv4,3=DNS,4=IPng
. s$ K; F4 f$ H; D; _% T7 u. v' \5+ IP地址或DNS名  可变
8 f+ K3 `6 X  u8 F8 Z最后2个字节 TCP/UDP端口号  可变
, S7 A' |0 J8 a- \2 C. U数据 用户数据 由客户端应用程序决定
# @% g- n& k0 |. }: n; ?3 M----------------------------------------------------
5 A8 N* |3 X& e4 X! V0 o* \) ?2 U' u+ e, s6 X7 b
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-2 10:34 , Processed in 0.020095 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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