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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
0 y' |0 G% k6 E' v  c3 b% ~2 v6 J上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 # d1 D' |) y/ `  G4 F8 [
通常不必关心 SOCKS5 协议。
; _0 \( h" K0 u9 A( Y+ r6 s& K" r! R- p
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
) ^# r/ i+ {( ?8 h+ |* W, r外部 Internet 的机器访问外部时,有用。
+ L% o% Y# M; ~4 U
9 ?3 G  E' B# @( DSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 4 b7 h$ |2 k& g" r
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 0 D, z. \* ^' Q3 F% `; W
网中的服务器,或者使通讯更加安全。
4 f  ]8 b) j  \0 K/ ^4 W, f. |4 C
5 i9 \7 n; H) P- P: eSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 9 b: e! h, G9 j  t- r1 y
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, . T. n4 q1 N. T+ Y
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
) p$ z- O" c2 w! h' c0 d# t2 I( x器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
% [! f* f2 ]# {4 u的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 + n0 D7 J7 w$ T( O7 }6 C) W
器的响应后,也原样转发给前端。
/ j: L3 R$ A. k% P  I  Y; e( A" }( \9 [( x
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 9 X$ T. \* w- e( V' J" }% B
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
! y, v% B8 |* I" \: h! q* T是它能够忠实地转发通讯包,完成协议本来要完成的功能。
2 O/ G- R1 G7 W4 l3 c
3 ^1 e% G1 l& \与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
. K$ }; P4 d2 L( f. V# }件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
3 v* U  f( c8 F& z换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
, B3 i- d$ @$ s+ d( p0 d. d/ K* D6 L! |% r6 o; S- d. m% T
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 ( _: ^* R4 K1 U1 _
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因   H$ ^- K" Y/ z3 q( a* a
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 % O2 l2 P6 k. J, K- P/ p: Q. ~
面。 " M% ~' O, G$ d, z1 C

+ o  w  c" Y5 G! p7 W不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 , C4 @$ N( C0 ~
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 : V& R# P9 [4 X/ ]# n/ k+ `
利用SOCKS5代理服务器。 % n- o+ R# \$ G. ]4 q8 {& R0 c
3 S. x% u& R& G1 ~5 U/ v9 i+ Y
一个支持SOCKS5协议的前端,通常具有两种运行状态:
: m2 I/ K4 C# a. W' |2 v' y6 q1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
6 ~6 S0 O1 ~( v. F: C的。 9 [7 l  L+ P* v: x! g5 ?) T* c3 E

4 \' E' }$ ~% @# G( x2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
4 `# O  J  r4 p3 [: t$ R! L& V: J送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 # M( b5 N' M5 o5 f
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ; D3 b8 _- ]. F' B, q
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
+ h" `& T. g) E1 I( q4 zSOCKS 5和SOCKS4相比有所不同,具体流程如下:
- F9 z; N4 w0 G6 l# i0 Y1 I3 y6 N* R三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
% ~% y4 X3 G6 d2 p& b客户端向服务器询问认证方法
2 F( d! m: Q# P0 {----------------------------------- . m- ]: f$ J4 J( z) v
字节 意义 值 4 `+ i; z+ P& X$ t5 m
-----------------------------------
) e. c$ m9 C* P; z9 q! b1 版本 4或5
2 ^8 t5 q" c% y8 H0 G( A* L1 x2 方法数目 - b0 J/ l& K' w5 @. a: ~4 h) Z4 q2 f) w
3-257 方法
# r, ?- j6 J  [+ ~" g& ^+ w$ r* E' d----------------------------------- " m1 h# a' j* z4 \4 w, H
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
- K7 |+ I+ o1 m! c; Y8 m% p; H; x4 h! L/ l8 C4 J; i7 D
服务器选择一种返回给客户端 2 F) U* {* q8 g" ~5 a/ ~6 X
----------------------------------- " T5 o7 m: X2 J& {- l9 _2 \
字节 意义 值
9 b: H/ M+ q' S% q  v-----------------------------------
9 v( R7 T9 Z% R* y1 版本 5 ) }0 z' `+ u5 {8 e/ V3 G+ p
2 选择的方法 其中一种,0xFF表示没有可接受的方法 9 _6 p+ r" }  Y6 W9 @* J( r
----------------------------------- " d" s1 [* H! I" `- X

" N  Q+ _( C1 m" u连接请求
) j+ M- Y- b; ]; W  b1 w3 p---------------------------------------------------- - e) s) p) J. d. t# v+ c8 d
字节 意义 值
$ o5 X! T) |& o) M- r6 H2 q----------------------------------------------------
# s/ J& l+ p$ s$ D8 b7 m, ]1 版本 0
2 A. A; B" `0 P& T! H" R( J2 命令 1
; q) \0 q- y; ?% O9 d& d* I9 N% }; G3 保留 0
. N  H7 l1 e, b+ L0 w5 \4 地址类型 1=IPv4,3=DNS,4=IPng ' M  ?& _- ?6 W1 Q. t# F1 B. N) M
5+ IP地址或DNS名  可变
- ~2 A4 _3 ?8 L5 L. z  T0 c/ Z/ t4 L最后2个字节 TCP/UDP端口号    可变
: r8 I9 X7 |2 [2 J---------------------------------------------------- 1 _% ?* Z' q* d; G* c

' n4 G' y7 F8 b) J9 \  b连接响应 6 V5 n" e5 U* r; X2 U
---------------------------------------------------- 9 Z0 h4 D3 `. c
字节 意义 值 4 }; F3 V# X9 r+ V
----------------------------------------------------
  H: L( K) r! k6 H0 }1 版本 0
) ]6 X" l) m: B# j1 b2 响应 00-08 # X) n; ]% X: b/ r& |: e
3 保留 0 6 u" n2 j* r) [' J( B) e: z; U: }
4 地址类型 1=IPv4,3=DNS,4=IPng
4 u% U- h: F$ m0 i5+ IP地址或DNS名   可变 + e$ d; D9 g+ W" E
最后2个字节 TCP/UDP端口号   可变
4 V/ @' e6 U( q; v7 }1 m----------------------------------------------------
8 n6 `* S/ s# x0 ]2 G响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
( ?: k: R1 m  V. M
  C: h- ]1 l+ g7 s; A( gSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: 2 I- c) t8 g1 ]/ `/ u6 w+ h* Z, v
---------------------------------------------------- 4 h2 `% L$ V! E2 Z
字节 意义 值 & p& E) _, k1 f' I
---------------------------------------------------- / U, f/ T* w6 P7 |1 h2 p$ Q
1-2 保留 0x0000
9 R% M  A4 \+ c, B7 u1 q6 f# t3 分段数目 可变,0表示不分段
/ q' [1 e7 n0 \1 p4 地址类型 1=IPv4,3=DNS,4=IPng . E. F% O) _! A1 o5 A* C
5+ IP地址或DNS名  可变
+ k, v! X. ~: Z; u/ [8 g/ b最后2个字节 TCP/UDP端口号  可变 % A; B; a1 `& j6 e9 o$ a
数据 用户数据 由客户端应用程序决定 7 ?- _& {, Y1 H
----------------------------------------------------
, q- y8 x/ `  ?+ F+ b
! h5 C, |2 b$ u* gSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 06:54 , Processed in 0.017760 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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