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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
1 D# W: V# n, E/ J. i* d上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 - t' t! y; Q+ X; H: q/ e
通常不必关心 SOCKS5 协议。
" n! ~) K3 D: y" f$ c0 v' G- G  s1 Y! z8 _( @2 O3 T7 p. p. a
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 9 t% t7 a, y; C; @" u
外部 Internet 的机器访问外部时,有用。 5 c& p" a5 u4 b3 b, s
" N( Q6 }" v+ B* Q. W" u
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 2 f" }2 B- p; L( ^1 k+ p' \1 l% K
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet " H! H1 V* v6 E9 q2 c
网中的服务器,或者使通讯更加安全。 - L0 _& g' P; I( {5 v: z* Q4 g3 }

  M# j% P; T3 E9 f2 E# v2 mSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
; p* E2 T. D( j# T% M5 Y* U, O8 l3 N* G/ @一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, 7 B7 o- ^4 N+ T0 N
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 . h. x$ c7 s4 S0 {3 k+ l
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 . X. P6 I% E" ~2 w2 ]% o. l
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 4 n" i! H( C, W: H( }, }
器的响应后,也原样转发给前端。
, g9 a- Q: B2 p% j0 U) k5 c9 c- a0 U( F
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
: I$ Y7 ]- h/ C+ t/ u/ Q都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 " d$ q. [( z" N: d
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
$ z/ `9 |. F- B3 p( w
/ _- P, I) u$ a5 M与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
4 l3 I) Q" b6 h- A* Z件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
: R: d. {" Y% J# j' [换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 4 h" a  D5 O+ f$ G  P$ @
' Q) o* [+ r8 b8 J
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 . b9 r. V* ~9 {' Q9 `; d
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
0 [* I5 L& `$ I9 [) `/ k此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
1 Y$ ~; l/ ]4 u面。
/ l8 s, W5 ^, Z/ \7 Y6 |6 F
' K. |: O0 D" M( g2 i# \不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 # o6 Z, x* ]# }! D0 j, c6 m
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
: u+ [/ }8 O- ]2 Q2 J利用SOCKS5代理服务器。 . L( w$ A. \( K8 ^7 ~

' ~- w: v9 U8 s6 w一个支持SOCKS5协议的前端,通常具有两种运行状态:
1 ]* P) {/ ]# c/ M# ]  n1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
3 q$ P' l! g( T的。
7 ^5 Z; s6 O, z9 g- `8 I2 W* l; ~, t8 p4 N7 N, o0 X* E- ^( K
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
/ m$ b9 q  o) x' E送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 % J6 V, ~0 }0 w" A  c% n; V
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
8 A; |$ M1 D& j% A1 p# J" w8 t服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
! f! r  O$ C; e/ N. z& `SOCKS 5和SOCKS4相比有所不同,具体流程如下:
& @) v9 n8 ]1 M+ i+ O4 N, i2 J" r7 c三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: ' A2 c: e/ l8 `  {: f* l' V! q$ L
客户端向服务器询问认证方法
8 O$ n* d( [2 Y& m+ ~! ]( b-----------------------------------
2 S, Y$ e5 F: H  t: ?, S3 a字节 意义 值
" w/ J" ]  F1 @$ I& J# O% t----------------------------------- ) L/ d9 a: e( }1 z
1 版本 4或5 ! ^- [7 G7 V  F' K
2 方法数目 - w  q, `: D- J, p
3-257 方法 % W& A8 u( o; Y4 d2 C  u
-----------------------------------
  A3 g. t5 ~, ]" j( N%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
3 e: d+ m) A8 T
' a6 @5 n4 ?! m服务器选择一种返回给客户端
! {$ j& A# d7 Y6 Q! e9 O+ ]0 K-----------------------------------
5 t/ c3 G9 C$ I5 E$ p/ X字节 意义 值
( i0 V2 V& x& ^2 ^7 }- @-----------------------------------
) K- F/ Q: `8 [0 V1 版本 5
6 A/ J& u  ]8 _: n3 e/ q2 选择的方法 其中一种,0xFF表示没有可接受的方法 ; L& D8 j* _$ z, I8 @1 m5 t
-----------------------------------
& ]6 v9 s/ W9 ]/ r. }; R5 m& ]
" L1 w, V* r  ?, C, ?连接请求 ! \% v- Y% ?( i3 v- E
---------------------------------------------------- ! U/ v4 }7 h$ t3 Y: \- ~( r
字节 意义 值
% S1 N0 j2 s# v- |6 `! B----------------------------------------------------
; w. P) c' w. Z: k- u3 Q1 版本 0
; f5 p9 p" x& v) X( S2 命令 1 ! W5 L  X. z, K& d7 j
3 保留 0 $ v- Y% f0 g+ ?! O
4 地址类型 1=IPv4,3=DNS,4=IPng
$ J6 B# B2 U& T5+ IP地址或DNS名  可变
- T  R+ b" U& [" t最后2个字节 TCP/UDP端口号    可变
: G  u# v' F* J4 P( j% B----------------------------------------------------
7 ~! C' B! x, H  V  ?1 K" b/ V! H0 l& l' {, {) P7 u
连接响应 & ?5 W7 Z! }- n4 N; E! k& v
---------------------------------------------------- + b9 f6 f7 z$ t" M; X* r% A  B
字节 意义 值
* ~* J9 X  C4 U  J" t2 B3 Z---------------------------------------------------- 9 z  U* [9 S7 M
1 版本 0
2 M& W$ y: |" g$ i8 \2 响应 00-08
) v6 t( P0 J; ?* J3 保留 0
2 p1 H- x0 P' [& p0 l4 地址类型 1=IPv4,3=DNS,4=IPng " K* y/ y$ L4 O" P! i
5+ IP地址或DNS名   可变
5 V  F5 c0 c/ i8 n2 p% H最后2个字节 TCP/UDP端口号   可变 5 w+ W2 i6 w, p+ y8 K
---------------------------------------------------- 7 Y& _2 T6 m  f% U2 W' p
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% 5 d5 ]) {1 U9 B- V( v. B# `  w

: @  A* P0 `; o* y% USOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
  Y0 j$ E7 S1 k) ]' J0 J----------------------------------------------------
4 d( g% g1 ]: M. b: I: Z字节 意义 值 7 M3 A& T2 @, o# d, ?2 H8 ~6 g4 K" E
----------------------------------------------------
/ g2 F  M, [  n) x1-2 保留 0x0000
. v0 f  |4 O/ N8 b- Z3 分段数目 可变,0表示不分段 & o' E7 C( t0 A! X  s% h5 m
4 地址类型 1=IPv4,3=DNS,4=IPng
- W7 H- O) ]* D0 c0 B5+ IP地址或DNS名  可变
" p; x7 {/ z& C% x! [最后2个字节 TCP/UDP端口号  可变 ) F# L. n) d8 w, a
数据 用户数据 由客户端应用程序决定
+ N6 t; o8 o% Y  Z" V* Q----------------------------------------------------
2 B- l: ~$ o3 p8 J2 O. j# K) }3 [8 o& s4 f& t
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-2 06:18 , Processed in 0.017288 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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