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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 0 F) m4 m1 g3 F# z0 V: T) R0 \
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 9 x. K$ `+ j. f0 m! o
通常不必关心 SOCKS5 协议。
; A0 B8 d2 f% i6 i# L5 o
* y: \, J" G5 f& O. {  C! P- q6 JSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
( S& H" |8 [8 B/ b. A外部 Internet 的机器访问外部时,有用。 ! k" n2 `# O" U# y: h- }( _
* |; L% P8 Z/ X" W# _
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
0 F$ N! G5 j6 W' {# s! ^- P机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
. k+ }+ N0 \5 H7 D网中的服务器,或者使通讯更加安全。
5 s6 }$ N' f' R$ w9 c
" m8 }& w/ I" i; F) B% f- Y# kSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 3 R* x: i2 o3 t0 P* g! x) R/ G+ B/ M. F1 [
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
  S0 u' g3 L+ @" |: K  i前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 0 ?1 B4 u# C* z5 C+ [% P
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
; ?" t2 D' k6 x% B的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
9 A' R3 h# Q+ }8 c: v% u器的响应后,也原样转发给前端。 6 R1 t; E4 E) H* _
& k) u, e; H1 U0 @/ B; ?* N+ {
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 . A) G- P& v3 H. p; ^
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 ( ^' f. y* N7 w. X
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
/ W, z9 ?" K1 @) U0 P8 A
6 k, U( G7 G; t8 q. ~与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 9 W- A" W5 `: y
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
5 |2 s0 d- Z' z8 w换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 4 v* H: D3 h) s% I# h

+ f2 z/ B0 F& G. C我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 - k8 M8 I1 h: x3 R7 a4 |0 i2 Y$ U
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
, {* `: L# i5 t* D! I1 l7 F0 q" [此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 - L: Z$ l, ~8 l! e9 X
面。 # ~( t: |6 i, p
; R# n( w' H( |0 L8 U- z2 M( L
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
# F+ }* i( L" Q! E8 q! l" D地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
- S; U& `4 [" S利用SOCKS5代理服务器。
0 S# B" y0 F9 `( M2 q7 F1 N- x8 A* t
一个支持SOCKS5协议的前端,通常具有两种运行状态:
, v, y% p1 Q% l3 W7 u, M1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 0 B9 ?; q3 o5 r7 P. n( L
的。
! N; V& V) G7 E( _; e' e& M. T2 I- @! E
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
: O9 r' Y9 Z; F$ y送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端   S& R6 p$ Q, k' ~2 N  J& d( x
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
" B6 K7 z0 B) G9 V. F* A# Z服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
" ^7 f: j  W3 k5 y( T: `$ V) kSOCKS 5和SOCKS4相比有所不同,具体流程如下:
* d7 T! T" y% N6 X" n三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
7 W7 f! e, N0 r* c9 ^/ D客户端向服务器询问认证方法 0 p& `6 a9 s( _0 j
----------------------------------- * h$ [* v6 q2 C9 i4 Q$ t
字节 意义 值
7 q# b2 ]) t& N# ~7 P-----------------------------------
' i1 \) K  a3 F' q/ k& v1 版本 4或5 ; |- X: q& h: n- c" f
2 方法数目 " N. ?8 `. m6 f+ w! W
3-257 方法 ; Z3 X  h8 G  _' {
-----------------------------------
$ ?! J. E$ A6 p%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 5 w- v2 e/ L& r* Z. V: H( k

3 n, j6 k3 O2 T9 q) Z+ u4 P服务器选择一种返回给客户端 + u0 S2 X; I# b* d: Z1 P  I4 }
-----------------------------------
* t' ]. k# i' A4 v2 Y/ @) m0 P+ A字节 意义 值
; n& [! P: Y$ ~# j( A-----------------------------------
7 u0 ?4 i  ~3 G6 V9 m1 版本 5 ) D* r( O' a8 W
2 选择的方法 其中一种,0xFF表示没有可接受的方法
  B/ T/ n4 W& q# [8 a1 R-----------------------------------
1 b: N9 U2 \2 t; z  M2 ]4 `' V& `0 Z. _1 q2 C
连接请求
' v9 S( u+ W, d8 k# F, d; U% ?# ?: t----------------------------------------------------
& U. {& M/ h2 t5 R5 F5 ^: `+ ~( b字节 意义 值 0 l! K8 z# n. J* L0 Q$ L
---------------------------------------------------- . s) l$ G4 ?2 q" E8 Z4 k
1 版本 0 . O6 o+ A+ ^1 f: r% y
2 命令 1
4 I+ s% k( u& s( o6 e6 Z3 保留 0 : H9 _% T3 H' R, A2 f* Z+ l
4 地址类型 1=IPv4,3=DNS,4=IPng
  E9 X" X* M6 [7 ]) F+ G/ l. V5+ IP地址或DNS名  可变
5 v7 J8 ]" C& Z. G最后2个字节 TCP/UDP端口号    可变 3 A  ~  m- E# ?! O2 W
---------------------------------------------------- & }6 ^; I9 S6 N

/ T  L* S1 F1 q连接响应
( s0 w* c8 G3 i+ S% n----------------------------------------------------
, H1 E, ~& K- j: V( W- @字节 意义 值
+ M. C% _. _) T* v3 }  H+ D9 V----------------------------------------------------
8 W& b  J8 L% l, A1 版本 0 $ t9 s+ F, z. q- }% Z
2 响应 00-08 5 N/ |# x2 J' l/ u3 Z
3 保留 0
1 v: ~& o) q6 j0 q0 ~0 e2 U5 y0 o0 A4 地址类型 1=IPv4,3=DNS,4=IPng : q8 H: i/ L5 [: M7 J1 k+ F
5+ IP地址或DNS名   可变 # r) x/ t) f! |- ]4 C" j
最后2个字节 TCP/UDP端口号   可变
% s* {6 Z% s6 l; A: r- y: g1 d, `----------------------------------------------------
; m' }9 ?. h+ i& O响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
9 g; [4 M+ |- X9 z- u" P' w! p9 W; Z7 T% O7 I& I
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
$ |8 f0 j5 w4 |- _! a- X# B7 Z----------------------------------------------------
  }5 m, m' X0 i字节 意义 值
1 w4 \+ D5 F5 a# h/ D0 C---------------------------------------------------- 7 \0 A# K* H3 g# x/ q" _# @
1-2 保留 0x0000
5 k. d0 M( g" @$ b: ?$ H: k3 分段数目 可变,0表示不分段
: B9 g* W2 a2 ^/ M1 [  V2 k9 Q4 地址类型 1=IPv4,3=DNS,4=IPng # e" |: |1 F  H; c+ g
5+ IP地址或DNS名  可变 2 b/ F7 V& @  h: ?! `
最后2个字节 TCP/UDP端口号  可变
8 R6 |' ?5 R8 d- X" k6 l1 _8 Z, V8 F数据 用户数据 由客户端应用程序决定 ) ^. G/ R! H$ G  K9 |
---------------------------------------------------- 6 G+ }- i4 w3 k) U" _& x

# J: ^" q, _% Z5 U* V7 _SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 11:03 , Processed in 0.018812 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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