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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 8 w+ R$ c1 o  R# s/ a
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
. m' V/ D( U/ ^- N/ R: C) _+ x! F通常不必关心 SOCKS5 协议。 ' L; C  j8 w. y6 `# N

( a9 Q7 I: @0 k3 X: mSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 $ Y- q5 C/ Y, e7 P5 _4 w8 m
外部 Internet 的机器访问外部时,有用。
- Q, T$ \2 ~% \& S0 W0 O5 K7 s# G" g* g. p' J" i6 X' \7 p7 t* u3 m
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
) F: n, Z3 ]& o  @- h4 T2 m, s机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
: G3 |, W5 t# _) d" {网中的服务器,或者使通讯更加安全。   b0 B* ^! W" W- G
+ s. e- Q* T6 a) D$ _
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
6 S& @; {1 `' C1 d, H* |7 x一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, 6 o7 t7 a( u* R7 Q3 R' R
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 , p* Q' A2 c* ?7 N3 q2 B! H
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 4 `* F8 D0 q# ~+ \) G2 r
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 + T  b5 n, r( `3 n% W8 V+ q
器的响应后,也原样转发给前端。 1 j  s4 [# C4 I% K  v; l
0 Q0 d  y) Q% l8 M; @- T
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
, U* n4 ?5 B3 x! A% z& |都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 + |/ c6 u2 a8 D7 G" G% J6 p
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
6 ?5 ^# I3 X5 Z7 ?# H' S% A
4 K; r4 K' v: z与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
* J  t0 p: k0 p( _1 B件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
: M* M7 |; x, B$ a& V* i/ f# i换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 2 [" {+ q1 q& Y1 S3 _

$ w, E, H! l" o& w/ O/ S# I" N我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
0 Y1 S4 Y2 ~1 l( `办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 1 q& z' O7 S) y3 I
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
: N, N7 O" j" u4 ], q6 o* `8 u面。 - u$ T/ q; D# M. x2 i

; _7 y& e: }  O3 G不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
' M: f, u- J/ h地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
) D& l& y" ?& d$ M! y6 b! o利用SOCKS5代理服务器。
) m5 A) J+ }* A0 ?+ q. A) }9 G3 ]# W% E; T" R( {: Q
一个支持SOCKS5协议的前端,通常具有两种运行状态: , m! F* ]: A7 Z7 G) o/ a
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 ( c. i) {( e& p. D$ p
的。
' Z+ y; g2 d/ i
3 Y' K8 P8 U2 d9 h) m2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
! X: X" ~/ H' }( L1 S$ Y( b( b送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 2 J1 }6 q- M1 n, ?. f# D4 D
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ; B6 W& l& y4 b' m  u: c
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
5 V# d$ l) ^/ X$ t! jSOCKS 5和SOCKS4相比有所不同,具体流程如下:
+ w5 i6 _' u( u1 B+ h* V  I三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 2 r7 N: e4 ^1 X& P7 g$ `
客户端向服务器询问认证方法
7 Z5 U- R$ g+ {* Z) U) G8 Q" ?----------------------------------- 2 }& ]3 I# u6 V2 ^; M& U$ ]
字节 意义 值 ) p9 j3 [1 f, X7 T+ N
-----------------------------------
; D5 k# \! V* m1 版本 4或5
% g4 a9 q  M& x( v2 方法数目
' l7 d* T5 T& j3-257 方法
, s+ a  m3 ^( K( o# _7 J----------------------------------- + X) m3 D8 M6 \; b+ e; w
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 3 {5 |4 i) t3 a: _4 h

% n1 C3 d+ e& g* H2 q/ K服务器选择一种返回给客户端
. t! a1 @1 F1 s9 [2 ~9 A5 Y+ b6 a: r-----------------------------------
% I4 d/ a# [2 ]) ?7 Z: t字节 意义 值
( S+ E8 E8 U( @7 v" I+ r----------------------------------- ' O# `. @0 X- f+ H. E
1 版本 5 / N  z8 D; l* X  g( G8 a2 M5 ]5 E( Q
2 选择的方法 其中一种,0xFF表示没有可接受的方法 5 ~& U3 z5 |$ P/ i. _% T8 \% |; ~3 G
----------------------------------- ( d( V, R% z+ @& Q+ s: d' u9 o1 d, e

0 c0 H# ~! j: F* V0 \! I连接请求
0 S) T5 [/ ~  |0 E- x; `( h----------------------------------------------------
% c& T( A9 j* O字节 意义 值
: ?" h! n; Y+ A; u7 l" {7 F( A----------------------------------------------------
/ E1 P. P0 A1 x1 版本 0
- S1 X1 {$ Y, `7 G1 \' }2 命令 1 , b0 m5 t  F9 P6 O
3 保留 0
; `, P6 v4 q0 t, |4 地址类型 1=IPv4,3=DNS,4=IPng   r7 a: L& K* V
5+ IP地址或DNS名  可变 % C& m7 L/ m" o
最后2个字节 TCP/UDP端口号    可变
! V3 e, w. K% F+ y4 E---------------------------------------------------- 5 @9 d# j' m% C  F
5 f8 r; ^5 I* y* W$ K( O! ?
连接响应 0 e1 S, ?" {5 T& q; Z+ y! r1 ~
----------------------------------------------------
( b- A6 C9 F" W4 b  x5 \字节 意义 值 6 W" b% x# ^) V8 O5 t4 r
---------------------------------------------------- 9 U2 J) d+ K) T4 C
1 版本 0 4 T2 M& U2 R! n7 q6 i4 X
2 响应 00-08 - f; I4 T8 ]0 K  m% ]
3 保留 0
9 l! N0 ?/ }; U/ S6 D4 地址类型 1=IPv4,3=DNS,4=IPng
8 [5 s6 o6 j  n/ _% n, S/ W1 [5+ IP地址或DNS名   可变
% r6 g- [$ u* @) J1 G最后2个字节 TCP/UDP端口号   可变 5 q, T; u4 O# F4 D8 V
---------------------------------------------------- , B7 M  p- U# f* i+ N
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
# P: M) _5 E- l8 ^4 b* I( W0 O
' T" l% L" O; y) L+ Q/ `0 i9 ~SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: . L# O2 M3 A% `( n; r: x
---------------------------------------------------- - v3 |- D" J& k8 J# M; x! U& E
字节 意义 值 ' x( B9 k$ U! |$ w& M, m
---------------------------------------------------- ' O8 ~1 Q5 b; K4 w
1-2 保留 0x0000   l: {+ y) A1 W& n) a- d
3 分段数目 可变,0表示不分段
% l  z' Y. `, h, _9 b/ ^4 地址类型 1=IPv4,3=DNS,4=IPng
6 I" m7 u# Q7 \2 E3 d5 Z5+ IP地址或DNS名  可变
& u) h9 @& l0 l& s最后2个字节 TCP/UDP端口号  可变 8 U& w- h" j3 x1 [  n+ C' R3 V
数据 用户数据 由客户端应用程序决定
# w# x' ?1 l3 S$ I7 ^; b; O8 {9 I+ G& ]---------------------------------------------------- 1 g0 |* m, {5 C
0 Z" C' i9 j1 R  e; K" \; B
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 00:38 , Processed in 0.129233 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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