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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 4 m( s' F! J4 k9 I1 {
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 # D- m% e/ h# i6 c
通常不必关心 SOCKS5 协议。
7 N' @6 J/ O5 m, ^  x$ r5 n& h' D+ B" \1 p2 J
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 4 z( k8 n9 C0 ]* `0 w# F1 B
外部 Internet 的机器访问外部时,有用。
1 P, B. Y! ?5 O. M; z9 h/ |$ M4 z9 ~# t3 E2 k
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 1 L0 `8 Z$ ]! \2 D
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet   d4 I- E$ |% z3 H/ V3 Z
网中的服务器,或者使通讯更加安全。
8 k/ E9 i0 O1 S1 d/ D8 o1 q
) l4 ?+ |  \( V8 vSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 ) n1 `& R. X. u, U% ~
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
) Z6 l. E- O0 D前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
& C, D; M) r# `9 \( }% `0 B6 T6 D器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 & M( k$ U- E6 c3 b; g
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
* f' b" ~( E, z器的响应后,也原样转发给前端。
# q6 X* H( M  \' c, f) A  g9 m0 y; _' K4 u- H3 E' _
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
! r6 e' S/ Q, s都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
5 f: c+ [; R0 z+ d' a1 J9 T6 U8 B是它能够忠实地转发通讯包,完成协议本来要完成的功能。 1 e1 [3 Q! D: g' |6 L  I( o/ f

4 A; k) e1 b$ j1 ^' r8 m. i( f% F与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 - j- }. F' m6 ?+ z5 l5 p0 G
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
& O5 p& }( @8 ~4 P  H换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
. A+ h* X% b: Y8 W% O- t3 Z/ Q0 D; J% P( E  i3 S
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
2 @$ r* G1 X. R4 e4 D4 k  P办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
) x, v% s& K: H7 ^此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
7 t% N2 G3 x( ]5 _, a; u! B面。
+ Q: p2 _$ k6 v# n
: g2 O  o* O% }- g0 W+ p& ]6 P5 g不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ' P. y! z6 H% W, V3 x% D
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
( w3 _, |7 F2 P0 \利用SOCKS5代理服务器。
* _6 e) w% d( s% E) h% q5 O5 [
- \" n/ ^2 _" c/ o# _+ U一个支持SOCKS5协议的前端,通常具有两种运行状态:
) A4 e: p" C% x8 U1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
: W$ m4 S/ X1 ]; z$ B的。   @! T9 J% F0 d1 G  A. d, p

7 ?# V  }9 s5 e8 q9 z2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
& d% J9 `# Q$ f) Q! e9 m送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 2 A' P: v8 L# z8 F2 y
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
( X0 v  c4 k+ i, ^* J6 `服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 ; q# L: c4 O% w/ T! L* s
SOCKS 5和SOCKS4相比有所不同,具体流程如下: ) P* Z. d8 n, Q- E, W% s
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
& g7 U- u/ g0 z& N客户端向服务器询问认证方法
5 i  J6 b( z$ `& y% s5 e( K# I: X& z4 ~: x----------------------------------- 4 D4 }# A) A# w1 S6 D
字节 意义 值
; S  K; B- f6 f( g' q----------------------------------- + h/ C* i3 J1 L" }9 c0 f6 E( K
1 版本 4或5 7 C# r0 Y: x1 |8 N
2 方法数目
2 P4 J- M7 s. }, h$ V5 H3-257 方法 % j; Z: A: f" \! f6 A  S
----------------------------------- ) O! v# I4 M3 z8 }4 F
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% $ T1 Y: w3 W% E
- [9 X0 p0 o( K
服务器选择一种返回给客户端
/ |9 N: L& \0 p, T2 ~----------------------------------- 0 t" Q" c" D1 U/ x
字节 意义 值 : G. g% Y  I" n3 f
----------------------------------- . K! H  G  D9 M- X- X
1 版本 5 ) ?2 t0 C1 P7 ~6 C/ h
2 选择的方法 其中一种,0xFF表示没有可接受的方法
  t3 d( ?5 q7 k+ T& ]----------------------------------- ) u4 o% K2 c$ p# C% X' T$ J5 s" O3 v
/ F! E' R$ q) \/ m: |
连接请求 ( `$ [% g4 ?& Z6 [% v: J
---------------------------------------------------- 4 l7 G0 T6 G: B$ X
字节 意义 值
6 O# |, u, b0 e$ T  P9 v6 O0 l----------------------------------------------------
# E; c; E8 U$ Y+ j7 m1 版本 0 . T# w* X! h0 `$ s5 |7 R
2 命令 1
- F" h8 u1 ]: G' _" Y3 保留 0
- G: K& e1 G$ A4 地址类型 1=IPv4,3=DNS,4=IPng # |" Q6 |+ b: g: S# p0 C
5+ IP地址或DNS名  可变 & ?) m$ q! \# G# z) M) V
最后2个字节 TCP/UDP端口号    可变 * z- X, P& j5 G* G3 I3 Q$ w  K
----------------------------------------------------
8 i8 e% a8 ]' b: M5 F2 X9 o1 r, X3 ?+ p  _& S3 {
连接响应
* r9 N( U' k6 B---------------------------------------------------- - _9 ?5 z9 v; ]" {* `3 j
字节 意义 值 . j( A* m1 o: F$ ?
----------------------------------------------------
, B1 _# Y. I2 ^- K2 v2 k& T& N* a1 版本 0
- h( R: ]& ?/ n; ?6 v" g8 @2 响应 00-08
2 Y. }* D+ j# l3 K3 保留 0
* a# U1 Z' Z9 \2 m2 z. i/ r4 地址类型 1=IPv4,3=DNS,4=IPng 7 }, o9 V; y! f! `* x0 I
5+ IP地址或DNS名   可变 9 [0 r) E4 V0 Y; c0 l
最后2个字节 TCP/UDP端口号   可变
) b: L9 A+ y7 u/ @* H' r" |( V----------------------------------------------------
/ x: i% M! f4 O! D0 X响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
8 d/ \6 Z& Y+ u: U/ p( H
% M, X$ Q& H8 G5 |SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
! r. P7 r( g- C3 q1 i. j% ]. n----------------------------------------------------
& O* R+ e7 {3 d+ D8 t4 z字节 意义 值
* r8 b, A- x3 P2 h, m1 w- j7 K; ?----------------------------------------------------
# Q# W6 B" |" v% T& {. B1-2 保留 0x0000
/ w$ @& {7 t4 t: e- F/ p3 分段数目 可变,0表示不分段 3 K: p, A5 ?5 X6 @; a, T
4 地址类型 1=IPv4,3=DNS,4=IPng 9 N0 ?0 d1 a! S. O# X: J
5+ IP地址或DNS名  可变
: n9 Q+ W( Z' K% [9 i3 A最后2个字节 TCP/UDP端口号  可变 * ^; `5 g" p3 K: e. j& Y6 x
数据 用户数据 由客户端应用程序决定   G9 B; T- m+ A4 ~4 b
---------------------------------------------------- & d4 r# O/ W2 S

* p/ M; @% D7 t. Y1 m" iSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-2 09:00 , Processed in 0.019830 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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