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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
, f* W( F! b& O4 D4 b. \! e上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 2 s& s2 t% f9 S* b- e
通常不必关心 SOCKS5 协议。 . K) ?: P- h1 D/ H2 l

8 v7 m9 I* F4 D: S$ GSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 $ `9 B* {, t" T, r! S: I3 u
外部 Internet 的机器访问外部时,有用。 & U  G( \/ U6 O7 k
. ?2 u  x6 p7 ?
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 + ?" T( u- b$ S" X$ x& O% D
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
: l. s- }* d! k  l网中的服务器,或者使通讯更加安全。 3 {* p7 l( [  y0 G: v; V
; f! n5 t0 C2 N" J, j
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
$ h$ t/ e; d' u% ?: m/ q; j: t一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, 0 k) }0 M! D) x" Q" W: R
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 2 ]4 W' A" ?. V: ^
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
! [8 r. p9 E  k& m' O的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 ) C# u, w/ s5 b4 K
器的响应后,也原样转发给前端。
0 P5 H6 Z) A+ D2 H/ O7 m) k! F3 S. |8 o: J+ I. Q1 L
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 1 v/ Z- W! t7 a3 ?$ e: T3 `% B* I
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 # R% o) d# }+ T  q
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
' X. M4 n1 Z: x3 X1 ~; G" ^4 R& U$ N
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
3 J: [  |4 b( U6 |% S) [件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
! }) N  h% v& r( M; k3 l换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
' e7 J" b7 @4 p: T" {$ F. E
) F2 Q- O, O$ }  Z. B我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
, r- {7 T& d5 k6 u' p) K- x办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 9 ~6 Y9 q9 x5 `) F' P9 a/ p
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
' m! Q" A; s( ?( H9 o面。
; q# d: y% Q% j6 O" ?- d# _7 x2 Y6 {6 s
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 0 e: R8 b) {) T8 `
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
' k. l0 k% y  s1 h利用SOCKS5代理服务器。 . j3 q2 ?: h+ t4 X& j% P+ q: j( l

" V' Q. L5 C: _4 C2 k  t. D  u# x一个支持SOCKS5协议的前端,通常具有两种运行状态: 8 z# p* t: h# v/ L
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 5 {& @" Z" R3 n
的。
) ^8 i: H5 Z5 ^% e% M6 K" [" v8 X" x" n4 q, J3 g3 B
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 - m$ M& D" o8 z* D. t" \5 z' R
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 ; q: H: H+ b; x" N- R
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 : ?! Z& N$ d+ F: s4 g7 a9 h5 D* N! k7 h
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
; t" Q; ?+ \9 s% O- xSOCKS 5和SOCKS4相比有所不同,具体流程如下: 6 w- N2 L( D( U- g
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 5 \& x. \4 ~% q4 v3 u
客户端向服务器询问认证方法
7 I2 V- h2 ]0 k! U, n, y. t-----------------------------------
6 M( e( V0 Y* h0 e- u, b$ V字节 意义 值
2 ?4 Z: R6 ]$ j5 J- @1 x- Z' l$ @-----------------------------------
5 Y% N4 O+ {- N0 j1 版本 4或5
5 I  M. u4 v1 I; L5 |2 方法数目
" c' P& x: e! U6 W3-257 方法   I! p& f6 S# D) Y, e) ]% B4 r
-----------------------------------
6 ^  P: M+ L4 T$ d# p( m+ L%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 1 c0 e7 K; _: L: P' ^7 F! {
; O! z, q( k% e. ?/ ?! @/ G
服务器选择一种返回给客户端
8 B7 H7 \& l$ r4 p2 P, L0 D----------------------------------- * q: G7 {5 L% `6 ?) b- B( b) ]% ]
字节 意义 值
6 D8 s  d6 H& t) H' C% ^----------------------------------- , K/ H1 l  B$ I5 W, L+ v
1 版本 5 ) J. w2 W( B7 d
2 选择的方法 其中一种,0xFF表示没有可接受的方法   t% X0 w1 J/ C
----------------------------------- 8 R" g' ]9 S1 W

" `5 d. T* K" e" G* a! o连接请求 ( l, q& G6 f( h  o7 Z
---------------------------------------------------- . P) v. n( e8 N: l2 Y; P. k( E
字节 意义 值 7 `: N9 y6 z& s/ w
---------------------------------------------------- 8 u; R! A# {, h- b% @  |3 _& f  s0 f
1 版本 0 - R1 K) V, |" f5 y$ V
2 命令 1
) x9 s) ]5 `% a, |8 K+ k3 保留 0
7 @4 }/ n; s3 ^4 地址类型 1=IPv4,3=DNS,4=IPng 3 Q0 s' }& q, _
5+ IP地址或DNS名  可变
" J* P) p; I: m6 x最后2个字节 TCP/UDP端口号    可变 9 M/ q, ~6 M) N# }- Q6 r# {  m
----------------------------------------------------
, e9 T1 n1 X% H4 g- R+ h2 g, Y; `) K. b- K# Z* Y
连接响应 6 U8 h9 V6 y8 e5 V( e) h
---------------------------------------------------- 0 i3 m# A6 M8 e3 h( E
字节 意义 值
2 v! n9 ]4 r& ?: T7 w$ j----------------------------------------------------
4 \1 d4 Q' t$ l) N# O1 版本 0 : E' U% U0 Z3 o* I( w7 v0 z
2 响应 00-08
/ K) i2 v; @- L0 v9 S' H, A3 保留 0 4 ~' M# l$ h: ?# P, D. D; ~
4 地址类型 1=IPv4,3=DNS,4=IPng
' h, P+ N+ ]" L+ U5+ IP地址或DNS名   可变
# L2 e6 S' V/ R: O$ A3 N最后2个字节 TCP/UDP端口号   可变
2 z5 H* h$ l) S( j0 q5 E----------------------------------------------------   G4 T9 w" P8 r9 W( X2 Z- X$ v
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
# o. Z+ r) F7 A9 f/ w( j7 ?" B; r
3 ?0 V1 v! [7 w4 ~- x8 WSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
* K+ D( [2 y6 f! d/ F7 Q, `----------------------------------------------------
/ ~' d/ j; ^# H/ P) i; S字节 意义 值 0 Z* {  p+ g* J/ L
---------------------------------------------------- 4 _: B" b2 j* ~3 ?
1-2 保留 0x0000
; m5 G1 ~; I/ t. U9 z3 分段数目 可变,0表示不分段
9 t5 s* q5 C2 n3 v4 h5 _$ x4 地址类型 1=IPv4,3=DNS,4=IPng - [/ {/ v* B! S" \( u6 J4 `
5+ IP地址或DNS名  可变 + E9 Y1 C5 y+ l, o3 _( O8 `
最后2个字节 TCP/UDP端口号  可变
- ?% g: l' x* p7 ]+ a) a! i: V数据 用户数据 由客户端应用程序决定 6 Q) b& s1 J+ f" L- T! l$ ?5 v4 Q
---------------------------------------------------- & n5 U9 E. i0 h4 L: o8 i
6 Y/ a: P  \- l& {  t: T! U7 M
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 09:17 , Processed in 0.017795 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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