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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 0 i6 [% f4 g: p: }% Y3 h
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
% x. h& R" b8 k; I' z0 W5 ~6 j; _7 Z通常不必关心 SOCKS5 协议。 3 f. D" d( ^9 I) K' y& d

" ^/ Q6 ~/ D' s' mSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
8 |2 ~* {9 K% i3 q" z外部 Internet 的机器访问外部时,有用。 & F6 \3 W: z8 s5 f' z, \2 v

  |# r8 K( A& g$ T2 v; @2 nSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
9 S/ D6 E9 d" M& ?8 D; F机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
: \# U7 R- s" t7 N! Q: M网中的服务器,或者使通讯更加安全。
" H! J" ^& y& U7 q
  {0 `" a4 I3 C! J& r( ^- n4 {SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
, v; j& ]( K# r( s* h+ o2 a一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,   U9 d' u1 r/ ~
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
8 A7 w% w/ P  [器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
% T  ^$ s9 U+ e3 n) h1 a( L. a, Q的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 " `9 b, Q8 z7 b8 }# I) e( {
器的响应后,也原样转发给前端。 . L3 s# P1 W4 ^* ?; d8 j' T

" v/ m' s1 X9 m' P( @0 Z1 t因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
1 Y0 u- y+ m; w) t5 }, Y都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
8 B: P# G, T% u: R; x  x是它能够忠实地转发通讯包,完成协议本来要完成的功能。
  \2 h" g/ D4 ^- n# M* g
, R. W- t. _, P1 Y与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 9 W2 O5 ?. B8 K& T: ^
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
& ?3 V/ W2 d9 c) k" e换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 : y8 s  i! U* r- j3 w

$ q; t0 Y9 O1 \0 h我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 ! f# Q4 P! ]) V3 R- s4 t  U# d) F* {
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 / z! `9 E& {9 k. o8 P7 B3 L, J
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 $ N) D: a5 ~4 {; H
面。
* l/ J1 a  Z6 L3 A9 a9 x1 d$ L: H2 e# O  @1 O* W: ^- f: B9 |$ ?
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
9 j* B, T4 w9 M5 L$ I& ]地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 / Z% Q/ N3 F! h) ^5 y6 v; K
利用SOCKS5代理服务器。 ; o  q1 _- s: n! t; W% V5 ?- b
3 r: l9 Q2 F' }! L8 v
一个支持SOCKS5协议的前端,通常具有两种运行状态:
& v3 ~2 p& j5 L/ p5 M1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
" @: X  L; g; A+ Q的。 * @: z: k0 w) I/ M) b

! _2 A  T4 i' J$ e/ J2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 # Y4 j- X5 X7 [. {& z
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 8 B& M2 Y- ^/ Z- @# P, Q" Z1 K
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 7 W. t: T* p3 x- V
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 $ |8 Q  c3 U, r- D. K
SOCKS 5和SOCKS4相比有所不同,具体流程如下: " n& @/ n1 Z7 U
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
8 v" w% t5 M( R9 h# V客户端向服务器询问认证方法 + g. ~7 e1 D$ K/ f/ u9 W
----------------------------------- ( d" P9 L3 L3 m  R. [- z
字节 意义 值 . H% A9 c5 g7 d6 T
-----------------------------------
* L# x( c9 r( v4 u. Y1 版本 4或5 ) R3 w3 H5 E, z) `% A8 _
2 方法数目
1 y7 }% M! y4 G& j3-257 方法
( T6 I6 o0 K- B& n0 ^$ P+ y4 Q----------------------------------- / }6 r0 v6 N9 {2 T; }) n+ n
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
- N# i4 m- G1 x6 o( J( r4 Z3 m. q9 `) \
服务器选择一种返回给客户端
9 {# @. B. K; A2 l7 g, R0 H8 o# h----------------------------------- ) m$ a9 z: F3 U
字节 意义 值
8 n8 y" q" Z7 b-----------------------------------
. a0 `1 `- U& Y! h0 \* M/ Q5 d; H+ D) M" _1 版本 5
/ m# R% b* u2 L" ~: G5 @( T: S  M2 选择的方法 其中一种,0xFF表示没有可接受的方法 5 n" `  a! A: m4 A% W- E
----------------------------------- / h: L# q* A( q9 r1 o7 w
7 j) T1 \6 l6 V  p  q2 C& D
连接请求
" _4 r) X% ^7 A- P, g6 y----------------------------------------------------
3 y+ M. b, l% g% t: U, H字节 意义 值 % m7 [* x- X% W4 C# ]
----------------------------------------------------
' d4 t' k) N% j# N) Q* x1 版本 0
* O4 z2 d/ w% d0 V1 b8 F2 命令 1
" S' k+ g; d9 Z1 h9 ~7 R3 保留 0
* H; f/ ^; j$ g; l2 Y+ s) f4 地址类型 1=IPv4,3=DNS,4=IPng / r5 e) Q4 p2 R* U$ W5 g1 G
5+ IP地址或DNS名  可变
0 M% d+ M9 q1 Z' r7 U最后2个字节 TCP/UDP端口号    可变 & [$ P! ^+ i3 l* j. n* l: C2 G
----------------------------------------------------
6 X. L5 M  X2 y3 |6 S# B  f! _5 O/ v
连接响应 9 m& V( I$ U( F, U+ k, }
----------------------------------------------------
3 W' A/ y- D: o6 \6 X( @字节 意义 值 - M5 v% k4 p* |
----------------------------------------------------
$ A: }$ L' K) r1 |9 `1 版本 0   Z& b+ ^$ T0 N1 R& c
2 响应 00-08   @" Y" g& }* S; y8 P" r0 U6 n* ]* c
3 保留 0
& t; b8 s/ ]# Z& A$ u* E4 地址类型 1=IPv4,3=DNS,4=IPng
( `) t- q" i$ l" B9 p8 n+ y5+ IP地址或DNS名   可变
9 C( a& E8 Z1 j4 O) o9 {最后2个字节 TCP/UDP端口号   可变 , {2 V+ }1 t/ F: o. h
----------------------------------------------------
9 l- E( d# S- i% a, c响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
" P9 ]% |$ P6 a" X; \) V
1 `8 i# ^- u* Q7 Q- |0 ~/ \/ gSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: : a; R" V  e6 w+ x1 T: {5 k/ |
----------------------------------------------------
7 @8 V0 X- |1 B) R" N3 |; T. j字节 意义 值 # S0 z- y8 K; [7 |9 x# A+ S
---------------------------------------------------- / K! v. C7 [# O- b9 n$ u4 i
1-2 保留 0x0000 ! s& W- t+ @% T
3 分段数目 可变,0表示不分段 0 f1 T, e8 U( _  _1 s8 d
4 地址类型 1=IPv4,3=DNS,4=IPng ' \: ^1 t0 j9 t/ O8 Y; ]" ], L  R
5+ IP地址或DNS名  可变 3 J9 W) f9 e6 n3 Q0 a' R
最后2个字节 TCP/UDP端口号  可变 * H6 Z7 C; q+ }( `2 z2 ]
数据 用户数据 由客户端应用程序决定
5 B4 ]" m( `2 ]( N6 S---------------------------------------------------- 3 V: r. A! b8 w2 t1 h  d* _; x* p
9 z( B& E* C, e& r
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-15 09:20 , Processed in 0.019206 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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