找回密码
 注册
查看: 5939|回复: 1

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 # z6 K) \# o* V; q& M
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 $ R) m8 g' J$ N5 J& H5 ~
通常不必关心 SOCKS5 协议。
  A% N0 J, z2 K7 [& H) r
3 O6 f' H3 R4 i' M( X/ U- i6 PSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 . P9 E2 Z& J+ l" b6 {& N
外部 Internet 的机器访问外部时,有用。
) V0 U% e. G5 y
2 c8 e5 N% z6 U3 kSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
4 o. z' ~. Z* x& w% b  W0 ~机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
7 S8 _( w0 H9 t/ g; g网中的服务器,或者使通讯更加安全。
/ t, a& g. X: ~; B1 q1 B9 d) F9 k, E) V+ A: M
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
9 c# N8 m3 E. U一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
% b9 N* N4 j1 j) c( U, L1 j前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
  Q1 f# F5 R& n! N% p1 x5 F器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 * M: L: Z8 h4 N+ Q9 l6 t, U& M$ z
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
' s: e0 J% ?2 p; |+ C器的响应后,也原样转发给前端。
# n; _7 x  _/ b3 ^4 g* q* X1 U5 m8 u3 X6 ?5 k, v: [
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 $ T( A+ W9 H& n' r. r
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
# |- ^# F8 O. E) P; Y- t2 ^0 ^7 r是它能够忠实地转发通讯包,完成协议本来要完成的功能。 ' H) n5 D7 A. U1 F& l+ x

! P3 n$ c9 S# _+ ^9 W与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
; s7 N+ r5 i1 z3 {' K件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
% u) Q  v/ q6 k0 l换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
5 Y( T6 P( o/ q2 P( {" N/ S- A& q
* K$ N: m9 [& m% Q$ H% {3 v我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 6 r, F% H* _" b$ Q& S  T7 I
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 4 b+ w3 M# E# N& x* k' b
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 3 x- B9 o2 L1 t5 z  |
面。 $ {/ o9 q* V2 A9 ^1 \

4 D2 F: r! T0 e  I2 m/ P不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ( d+ a# {/ H0 B  O! q! e+ s
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 / [6 q$ O* ^3 u2 A2 \
利用SOCKS5代理服务器。 0 O$ |! h& a& w8 N3 T
4 L) N5 }' o) F1 |9 k
一个支持SOCKS5协议的前端,通常具有两种运行状态:
8 n9 _; p6 s* G% {1 V  F  ~1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 " |. D( M; H3 M
的。
/ H/ U8 f- x) [, ]( v( A/ U0 ]( I6 ?" d% a" ]
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
5 D- b8 r2 K5 g4 T送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
0 z' |. w: f0 J5 m告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
( g) i* q8 `* t5 J$ m服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
0 m2 p3 w. t* N" K! O; tSOCKS 5和SOCKS4相比有所不同,具体流程如下:
4 I* H0 O# c3 q# l& h" i0 U$ f; _0 V三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
  z6 P8 g) N6 h' {客户端向服务器询问认证方法 ! @$ m4 Y. h$ ~0 b4 D0 L
-----------------------------------
. r* r8 F4 q. `( X字节 意义 值 # x* K+ M" D! E/ d5 M
----------------------------------- ' X0 {- r5 Q, X2 \: s  L! T' a
1 版本 4或5   |% n( W. I# B' e# A9 I
2 方法数目 5 Q& I8 O, @, A8 w# x! _
3-257 方法 - c+ A& w6 u: h% O) w# q2 @
-----------------------------------
+ @, \* d' h; O3 A8 j%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% " @& Z, W" b' q8 ^7 K
, a8 B$ m0 ]9 l, x
服务器选择一种返回给客户端
7 J1 G/ p3 I5 ~' N----------------------------------- - H( U+ N- y. ?5 R5 Q
字节 意义 值 . I$ M5 F/ U  G
-----------------------------------
4 o/ D3 C# F7 j5 B3 @. J* \1 版本 5
# C  \5 W; W( l2 选择的方法 其中一种,0xFF表示没有可接受的方法 6 G% @1 v3 c" D. P& a% `' e
-----------------------------------
" p/ I  B) c* `; x6 @' l4 q  Z8 E
连接请求 % C# [. E- u$ b2 h% S
---------------------------------------------------- ; o- c6 t$ d8 \
字节 意义 值 ) ?9 K5 F: C/ @7 L
---------------------------------------------------- 7 ]1 E7 X$ a% w4 x# z, o
1 版本 0
. F# R  P  A3 L! s, S: B2 命令 1
0 V1 a$ S" V  {" N, L5 X( w1 C8 f3 保留 0 3 E# ?# i: }  \
4 地址类型 1=IPv4,3=DNS,4=IPng 5 m4 c4 F. ]9 d5 \  t
5+ IP地址或DNS名  可变 5 g2 ?. J& H4 d
最后2个字节 TCP/UDP端口号    可变 ' a' ]3 M1 v" l8 p
---------------------------------------------------- ) f- T0 e" G  z/ i+ @0 L; ?
5 O5 }: o  ?: G! Z  z
连接响应
% W8 O5 L" P. d9 M2 F+ b----------------------------------------------------
8 Q! g5 I$ N+ J- A9 r* V$ w字节 意义 值
5 C2 |& |$ F# z" O8 i# _---------------------------------------------------- 0 i$ M, D. z1 O4 K- [) J; ^4 B; u
1 版本 0 # W% F: M' u+ A) W5 N& [
2 响应 00-08 3 c  U/ R, a5 f5 }+ ~, C, H" Z5 W( j
3 保留 0 7 x: ^9 n1 M% N' E+ l
4 地址类型 1=IPv4,3=DNS,4=IPng 3 I! v/ C) h1 h: Q  g. P1 R; a7 P
5+ IP地址或DNS名   可变
7 g# ~' m" O" {9 O* i最后2个字节 TCP/UDP端口号   可变 ; |# h- }' ~6 i* v+ A% ?5 Z/ `
---------------------------------------------------- 4 h9 T0 Q( v' U2 S
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
/ G# ]  z0 ]( I6 G4 p# m8 L5 ~# n
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: + m7 L" H" l1 g
----------------------------------------------------
- L3 K5 F* u2 G! f4 u. G. f- L2 _字节 意义 值
( I& u  q5 T2 j----------------------------------------------------
+ f& m0 [; z5 D- ~/ q0 u4 y1-2 保留 0x0000 6 A& Y# i+ [0 |3 L) l6 L$ H' A
3 分段数目 可变,0表示不分段
; c/ x& s! C3 Y4 地址类型 1=IPv4,3=DNS,4=IPng
4 B% D) z! K& v- {5+ IP地址或DNS名  可变 6 p9 a! }4 S5 _% _: Y' n1 C) {& V4 y; @& c
最后2个字节 TCP/UDP端口号  可变 " L) {0 Y, R. K) C: @
数据 用户数据 由客户端应用程序决定
) i. h/ ]2 e. u. O----------------------------------------------------
) o  }  x" D0 p5 R
( a; L9 y& ~4 d$ Z$ ISOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-1 20:51 , Processed in 0.017852 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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