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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
' l, @+ d4 s4 C2 T" W' m上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
9 W4 X( v5 Y  s通常不必关心 SOCKS5 协议。 5 c, s! D: b& S! H

0 j# u' D* J9 q' FSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 0 @6 ~( f$ }& ?& W( s
外部 Internet 的机器访问外部时,有用。
" [1 s4 @( x2 w/ _. k# E7 z5 [$ g
: b- W5 R3 u( y# R% p/ g, S$ i$ uSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 , p+ Q$ K1 o2 T7 {. \1 `: I& V
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet , E/ r: O, e( {7 L9 x8 x6 g( f2 K
网中的服务器,或者使通讯更加安全。 8 a' Z8 V- E6 s% D, ~( t

7 X% q' j; \/ K! c$ F' OSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
% h' ~9 v# n9 }' {/ h一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, 8 \1 H- u8 q' l- }6 ^
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
1 |, R" @+ z# U& R$ s, `/ F4 W器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
4 X* x# D) [# _3 a% n: W+ ~0 o; @* R的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
; r8 F  {' ?* g0 ^! s9 z( ]器的响应后,也原样转发给前端。 1 M; L  g- y" w8 N; g& ?# u
) U9 O9 F" K* e' t% _* t
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
) J$ U! j# z: k9 t) l都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
) e) }3 T  u% V: f7 v% [1 z是它能够忠实地转发通讯包,完成协议本来要完成的功能。
  d0 P& J- y4 T+ `4 a  q' }# K1 F
' B( c, N3 Z+ l& @与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
: k6 L4 x+ e4 f" R件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
0 q* k( q" P$ a, K2 {9 n& ]换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
2 h! u+ m$ ], j2 R) W/ w. E  t- Q: h& E: f
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
; t" A. H) D6 n* t. i办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 5 b: ^# ~# D9 r
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
1 Y2 Q3 v5 i- w面。
$ _: I- A( }' Y& a8 Z3 f* r4 y
* L5 n. ~+ v: P, f$ y不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
  u5 R8 L2 W& ~. L1 C地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 " k+ a2 G. [0 H, i
利用SOCKS5代理服务器。 / D. Y" L  B1 @! W$ _

! ]8 K) ]2 a  F7 g一个支持SOCKS5协议的前端,通常具有两种运行状态: ' [; N' h& l. A/ y
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 - \! i3 |% d; z. r& E& Y4 o
的。 6 M0 G) O, M' D, q
/ l4 K3 z9 F4 Z; h* u/ |5 `+ O3 u
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
2 s( E6 H- H# s7 m) J送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 ! t" r! g" q! `, G7 e; `; c& m
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
) C- @/ Z) [! n- o& l6 D4 G+ r服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
- m: c1 u. l# L6 bSOCKS 5和SOCKS4相比有所不同,具体流程如下:
. ?8 R5 a; Y. I三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
% i. n3 V, ]- D3 E) _- R; b客户端向服务器询问认证方法
5 ?9 B; w( Z1 l$ }& J----------------------------------- ) x6 |* T( W6 d( s: x: `& c2 Y/ g4 r
字节 意义 值
9 R$ g. ?) g# b- w----------------------------------- 6 D; F1 M5 K/ n) x6 ^, f$ x' C
1 版本 4或5
; ?% ~" k0 e  W1 b+ s2 f7 ?2 i2 方法数目 ' S# z" D! P3 [0 y
3-257 方法 , N6 x( i5 W+ D
-----------------------------------
/ k+ k" l! w. K- ?5 j%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 2 |6 X# _, U! n" U: c+ L/ }7 h
4 M9 c: }3 ?9 W. S7 ^
服务器选择一种返回给客户端 " {" \( A& `: E1 @
----------------------------------- 8 C0 l4 s" t$ Z/ ], ^) y. @8 M! V
字节 意义 值
; `: A8 o6 f2 b7 F----------------------------------- ) R9 e9 F9 c* j' [4 l9 O
1 版本 5 ' A' {7 u) S8 d. {  A' V5 }
2 选择的方法 其中一种,0xFF表示没有可接受的方法
" x$ f7 H7 g7 Z6 Q  M----------------------------------- ( C; l! N# K6 ~; X4 g1 y  F; _
$ o. D( d  u3 S4 h, ?$ J8 \8 e
连接请求
" m2 g0 \0 @+ ^2 p3 W----------------------------------------------------
2 l) d- A# x) W1 }" J+ P字节 意义 值 1 r( L3 l' N9 P. B# t1 U% \
----------------------------------------------------
1 |! W; n4 _# i' U- ?1 版本 0 9 j, C. x' N6 i2 w: X
2 命令 1
1 N& T! {6 ]! d# k% v3 s3 保留 0 1 h: d7 F. j  X3 f/ a' t
4 地址类型 1=IPv4,3=DNS,4=IPng 6 g+ p: {9 c( K! ?5 @. H; T
5+ IP地址或DNS名  可变 1 _- K" ^7 o) E$ V0 o
最后2个字节 TCP/UDP端口号    可变 % n3 G+ s  N( O7 |
----------------------------------------------------
' G; S4 c: O% [- `/ r5 X  N' R, s2 r
连接响应 1 e6 J6 `; u7 c2 o: t
----------------------------------------------------
$ A1 Z3 O  W2 N$ E  G0 S; S5 A字节 意义 值
% z  A1 f9 |+ g# v0 \  g---------------------------------------------------- # a0 {! ]$ b& m9 n
1 版本 0 , p7 w* X; A$ X- _, ?
2 响应 00-08
- h8 n1 a0 S, H3 b! D. c3 {, M( P3 保留 0
& s* y( z, b" V4 地址类型 1=IPv4,3=DNS,4=IPng " m. X: p7 V* w/ z
5+ IP地址或DNS名   可变 / E6 a8 i: f4 y4 A' D+ R
最后2个字节 TCP/UDP端口号   可变 / @' M. `- W2 I) k7 I
----------------------------------------------------
5 w/ S9 ?/ a6 M+ |1 Y响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% & P/ i& [8 S4 f' N6 O* X; F- @9 T

% X( }+ P: c  L. ySOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
' N7 H, _+ F  Z3 u9 U! a2 y---------------------------------------------------- & ]! l4 Q' I' y( L, J
字节 意义 值 9 x5 p! u5 n$ M
---------------------------------------------------- 3 [5 @) _0 E$ p( ]' d
1-2 保留 0x0000 * P# i/ \# e6 I5 I7 O
3 分段数目 可变,0表示不分段
( _5 v: {& Y( \% X3 ?- R4 t4 地址类型 1=IPv4,3=DNS,4=IPng 1 A  g3 p- u5 X; v9 f+ w
5+ IP地址或DNS名  可变 - p+ ?$ P. [7 Q( Y/ r: C6 g
最后2个字节 TCP/UDP端口号  可变 2 U, M5 x. p- O+ `- t
数据 用户数据 由客户端应用程序决定 $ a: p! x, W& f) Y6 x. g
---------------------------------------------------- 9 _1 n0 |! k0 u" g2 e2 U& s4 [2 u

5 A) d7 I& D' _, m/ [* c8 VSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-9 04:25 , Processed in 0.035060 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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