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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ; F* V1 I  u9 m
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
/ Q: [1 K& k" j* |通常不必关心 SOCKS5 协议。 7 G' v2 E! k1 v/ p; G" s2 m

$ S0 ?! o  o2 KSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 ( p7 J7 y3 r% M, }
外部 Internet 的机器访问外部时,有用。 ( R4 N6 X. X' V- a! z

) u9 e* N- z% PSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 . X: D+ ]& u7 ~) @* N; _
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
/ Z# R1 _; x: z( [网中的服务器,或者使通讯更加安全。
# p/ c- \# u0 [- Z7 s
( ~7 S6 }4 [* x' q% A$ P# x1 eSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 8 e4 m9 H% K2 L# S( Z  f
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, * k5 v3 o( H7 i% B% ]4 D
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 ( s' O) |% g' B, h2 \, s9 m  G/ b
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 7 F  Q) H5 E5 a
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 , A0 I& ~) ^; E$ M  w! ~
器的响应后,也原样转发给前端。 ; O2 e7 D% @0 V' e4 V( F4 K* c
4 c7 L4 A- l' l0 R' _7 j8 D2 \' B! s
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 8 I7 \  {. D3 H) b5 J) ^
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 ! a/ h5 L( ]+ u( R. k! s! n
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
/ ?# b& i4 I, ~; l5 o1 S6 Z8 {( r4 n2 g
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
* B1 U4 x3 g7 I2 r8 x件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
. T1 H3 U, R5 B8 g3 z# B$ C换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 6 @% }3 f) T& u* J1 E7 G' w- o3 a

! @% A% K5 k: I* a/ k* I我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 4 C7 N4 i6 b7 R: t. q) N3 p
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 . m2 x! n, ]. \6 O
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 8 t: L* f  M$ i  R
面。
- J; a' w: T* s
) @6 V5 I- V: z) K" G4 ?# W9 V, q不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 . f' a7 r/ `! q
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 ) h& l/ O  Z& u" y0 {
利用SOCKS5代理服务器。 0 n/ U' t# Q% O4 o# X: d

; ~/ F4 f, H9 G一个支持SOCKS5协议的前端,通常具有两种运行状态: - h$ E. w. T2 @$ E
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 4 J2 F: r- ^! W, q/ {, S
的。
; C* |+ c% l* R- Y1 N' i( P  L3 H0 {* ?1 P
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
# S4 \& H& }6 g: P/ E送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
# [) A1 B* S- a' ?( d0 {& H. a; N/ P告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ' E3 U5 l$ M8 Q( N# J
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 ' O3 v& G9 e; T; M4 ]
SOCKS 5和SOCKS4相比有所不同,具体流程如下: / l+ R/ u4 t5 h( D' E
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
0 T7 \9 I/ O9 k& B客户端向服务器询问认证方法
6 P+ J9 @( Q3 H% L* Y1 C( x6 k-----------------------------------
( A2 Z: D- }: |& z. g字节 意义 值 " V' x& P! `/ l. A+ B, R) \
-----------------------------------
1 A8 l6 u2 e( }, m1 版本 4或5
9 d2 h& `1 y: W& Z2 方法数目 $ ^5 L6 T/ m0 u4 y: }
3-257 方法
0 f  S  o" Q7 ]----------------------------------- ! [( r8 s  P% ~. n
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% ! U. I; z' P7 t) Z  ]0 Y3 r6 @& c3 d
$ \! R; w4 P5 J
服务器选择一种返回给客户端
. d) s2 a' u8 o' I' J----------------------------------- 5 M& Z: B, g- e$ H# _* Y! a4 R( P
字节 意义 值 0 D7 M% F; ^& W: f, z
----------------------------------- 3 [" B, h# Z# D' w  g8 s- G
1 版本 5 5 K8 U% w- C% U1 w5 O* C6 q/ ]& f2 d/ j
2 选择的方法 其中一种,0xFF表示没有可接受的方法
$ K+ @( N2 |" m! B# J-----------------------------------
/ W4 p! ]* n$ t5 I7 Y
+ }7 N/ b- B: P3 k# J连接请求
; _4 G6 l& y" W" o, ~5 W+ j) [7 k---------------------------------------------------- 1 l  {3 z* p8 |7 \
字节 意义 值 8 r7 s0 C3 b  h# r+ u
---------------------------------------------------- - H; `8 Y- D! a7 {9 E% y
1 版本 0
$ l) `2 b$ j5 b+ n7 Q2 命令 1
) m1 U1 K( P) Q# |5 `; N3 保留 0
) K- ~: j* _, ^+ k0 m7 G$ c4 地址类型 1=IPv4,3=DNS,4=IPng 2 M$ T5 a1 X8 h3 K3 `2 F9 N! X4 T
5+ IP地址或DNS名  可变 . }5 `/ Z3 H1 {1 P, g6 w; N3 k' N
最后2个字节 TCP/UDP端口号    可变
; N( I8 u! Y# S, z, ?7 z---------------------------------------------------- ( @, o. ~- i4 m. s% o
0 S1 a3 ^0 D" O. U; M5 |- Z1 S
连接响应
1 k9 o4 Q9 \8 i----------------------------------------------------
* k) D5 `2 w+ ]& p# Z; D& q' u字节 意义 值
5 L; U- F9 }2 r% ~2 y, s  _' }---------------------------------------------------- 9 c: r9 t. i( B( H' S% d
1 版本 0 + ]. f1 v' A) \7 N
2 响应 00-08 & h4 d* u  K) M: @% m
3 保留 0
7 U$ g. Q8 l' C* D4 地址类型 1=IPv4,3=DNS,4=IPng
( \, L0 j# R1 t7 S$ }5+ IP地址或DNS名   可变 / l. t  o3 P$ n" n6 w
最后2个字节 TCP/UDP端口号   可变
+ I( o: Q; }0 t) T, e. S---------------------------------------------------- - w- k+ W$ a' Q$ {9 V/ b/ V' P
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
& `* Q6 a! d4 \3 |+ R8 T% K; \, o
0 J$ s- x7 M5 y  b# ISOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
& C% S0 H% {: m---------------------------------------------------- - Z. H8 U9 G8 s9 Q
字节 意义 值 5 @7 G# a6 R; R! D3 n. J
---------------------------------------------------- . g2 |% p$ ^+ }
1-2 保留 0x0000 3 k1 [4 x2 J$ F, g. E
3 分段数目 可变,0表示不分段
2 q0 B# M: ~6 q5 G. @4 地址类型 1=IPv4,3=DNS,4=IPng + h& m8 K6 k9 ?+ F# L4 j& A
5+ IP地址或DNS名  可变
" M7 }  T! r% p% e) L! o9 [7 T* V$ r" m最后2个字节 TCP/UDP端口号  可变
. h; [( n6 }4 n数据 用户数据 由客户端应用程序决定
7 F% \6 b" N. e  G* P9 h---------------------------------------------------- 4 |' N9 b( H6 K0 I

, s/ Z$ P4 R- @9 B3 }SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-30 13:16 , Processed in 0.034813 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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