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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 , p+ x( d# P& E' }# K& [
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 4 C) u, R1 C" [. g" @) D7 A! H7 x( J" V
通常不必关心 SOCKS5 协议。 8 w- f# i- N" Z+ J3 J8 D

1 O8 z" S( D# k9 T- oSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
4 q7 G# O3 H% s# R2 j外部 Internet 的机器访问外部时,有用。 2 v3 m! I9 ^" S) _3 [5 x  o! h
1 M6 t: P( B' d3 ^/ N
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
0 L1 b: t2 k- D6 i8 _' @& K8 t# x( G, \机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
( Q  J( L0 J1 O% Z. C网中的服务器,或者使通讯更加安全。
, J, ^' j, J5 }+ [3 D9 J8 H( b1 C" w
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
0 R, d6 C; O: S$ q9 }# y一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, ' G' Z) q; r$ k8 Y+ f( o2 x2 G" |
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
1 A0 D0 N! h/ B" ?: L/ s器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 ! E9 z! e; o8 r8 B
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
0 Z8 Q: {( {$ c器的响应后,也原样转发给前端。
7 ^4 I) ?7 s7 m6 J5 c0 M' N/ ?! T6 A& R) g2 Y" ^& o! N" c
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 - W  D$ Z+ g& |
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
6 q) p: T* C* V0 |+ j; ^5 Y0 L5 ?是它能够忠实地转发通讯包,完成协议本来要完成的功能。
) J6 k$ l9 I4 \& o% x8 u
  c. D! N/ r/ e  b8 p与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
, t: J7 a) V7 O( [- _/ Z1 q件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 3 v# f5 m; ^+ Q) L1 F: L7 Y  A
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 ) r* [7 P' M7 w$ M5 q# b

  x5 k0 N9 K+ T4 h我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
& i3 U7 [2 l  d1 n& o- K2 I% v6 R办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
, R* V3 ~8 d( g5 Q* H  s此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 $ @  z1 [* l( M) ?/ N8 K5 n
面。 - Y6 E/ t8 \7 M" f

+ P) {  w; _/ [, ~( ~/ |% }不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
% f% o# f+ Q7 n! G4 a地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
$ o. x: k1 K! F/ T1 Y' L* T利用SOCKS5代理服务器。 + j6 l. A! w" d) V; t4 h  C2 ?/ _; f6 u
. s9 L+ k+ {( J+ M
一个支持SOCKS5协议的前端,通常具有两种运行状态:
$ m: ]! j$ O, @* l1 R1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 . x# u- {6 H: L) g8 C
的。
" Q: k4 C& d( Q6 I- ]
: s, ~  I/ A3 a2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
* Q0 j0 c, t* R6 M1 z/ r送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 & e8 _+ ~  o2 }( H/ m# T
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 * U& m% f6 t+ \* H: V
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 , s$ i+ B( n% a$ J; B! J; o
SOCKS 5和SOCKS4相比有所不同,具体流程如下: 0 N' {0 J1 `2 `
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: * X5 c+ E+ l4 q7 V5 ^
客户端向服务器询问认证方法   F% J$ X' B/ {9 H' t1 e
-----------------------------------   P6 f# L! F* g
字节 意义 值 # [. E, A0 v3 ?: t+ a/ \
-----------------------------------
; V' f! w/ O7 {  L1 版本 4或5 & k0 T, U2 T8 t& W
2 方法数目
* C& v1 ^; o/ m! x# T0 |3-257 方法
: y2 u. @8 L5 }" x+ K0 m" v/ ]-----------------------------------
/ z* T, l. i$ ]%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% ! Y' G6 V& z2 p( `0 t9 y

: i8 w9 |: u8 x" q% [0 R1 y: I$ W1 W服务器选择一种返回给客户端
1 Q1 d4 M" V$ J6 D) W# f----------------------------------- * C7 q6 F8 a( n+ x* q
字节 意义 值 - j0 \( p  ]% P# F, B) b
-----------------------------------
' ?8 n8 g; F% J* E  Z) @1 版本 5 9 B( q! y* S2 _6 G; o5 L
2 选择的方法 其中一种,0xFF表示没有可接受的方法
* x& n+ |& f0 h-----------------------------------
( p# P7 y$ y/ R: \4 b! R3 A( [5 ?  u# ^  V1 H
连接请求
: R) n/ w: c/ k. E: K---------------------------------------------------- 0 ]8 K8 \4 v; i  K- |
字节 意义 值
7 Y. o+ z& n" c) J4 f6 X! g----------------------------------------------------
% k( J5 X: G/ x- Z1 版本 0 % ?. B" y$ ^+ Z" q, o; r
2 命令 1 3 k. e1 R( {- U8 |  p6 ?: R
3 保留 0 # k" s! U# q3 c" j& x- E9 b# l
4 地址类型 1=IPv4,3=DNS,4=IPng
4 F7 F! f. ^4 S% M/ C9 I5+ IP地址或DNS名  可变 6 P7 L3 N" V2 R/ }% E
最后2个字节 TCP/UDP端口号    可变
6 c$ n8 {' q9 v, k' P* }---------------------------------------------------- ) K, Q1 l, [) f3 }5 T# t4 I
9 Z& S2 W8 C# E. }. ?' p
连接响应
1 }( y; c4 q' j1 T6 Q, Y----------------------------------------------------
- R- a9 K) N0 M: t字节 意义 值
; ^2 r7 N6 I$ X0 P  w- `$ m3 {---------------------------------------------------- 2 O6 F- I9 X$ f9 g8 m% V* r( c' ^4 F
1 版本 0
# |' {+ M1 D$ Z+ d; S2 响应 00-08
* C! e4 y4 H) e" Z. D- ~3 保留 0 % I  L6 y' Y. Q9 F$ u: j7 B
4 地址类型 1=IPv4,3=DNS,4=IPng 3 f4 Q% A. w  R7 t- E
5+ IP地址或DNS名   可变 ( ]  Z( |: h4 Q$ p1 K$ d4 Y8 U
最后2个字节 TCP/UDP端口号   可变 6 s" M5 U) x" U/ x
---------------------------------------------------- " ^% f  \/ ^9 X# ?  g
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% % M. `! ]+ ?4 ^7 o. o8 c3 {# N2 A  N
9 ^2 s+ [0 S! c4 y
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: & D9 E. B6 k) u' d: s0 J' }& _+ E
----------------------------------------------------
  h. H7 n" |  _7 ]+ P. ^字节 意义 值
2 g9 O* U! S7 N* a---------------------------------------------------- 1 F# ^4 ~5 \. `8 D& v
1-2 保留 0x0000 1 r; n7 s: F7 J7 [) r' d# d7 g
3 分段数目 可变,0表示不分段
/ D! M, L4 Q& A. ~5 j2 c- ~4 地址类型 1=IPv4,3=DNS,4=IPng
! k3 H2 Y0 H& [) |8 r5+ IP地址或DNS名  可变
* K8 i4 @+ K4 p最后2个字节 TCP/UDP端口号  可变
9 P# D8 W+ ~# g+ Q: E数据 用户数据 由客户端应用程序决定
  K6 l: F; b" M3 m4 ^# H6 I2 `----------------------------------------------------
1 x1 w, n3 V6 x8 U6 O0 \9 p2 \1 h- `
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 08:07 , Processed in 0.018625 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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