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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 ! x' N  _- d  X  p9 @+ E
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
* |  V1 y- l6 p0 L$ V! g通常不必关心 SOCKS5 协议。 " v3 e# W3 n/ K/ W2 q1 W! ~
  m. g+ h( `/ Y8 g+ B! X$ n: w
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 $ r- z$ v# \" B+ n5 I
外部 Internet 的机器访问外部时,有用。 6 P. R7 K/ F6 R5 a$ {: ~
' l# p: }. L  H/ M8 a
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 - R8 `6 T1 u- R
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
3 \+ k5 W/ m5 T+ o0 T. d: k网中的服务器,或者使通讯更加安全。
, E# H2 t! I* K- n7 G4 K' C
' ?, N2 P. I4 p8 OSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
, Z, d. M% |9 }3 W9 s2 H一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
4 E% C7 A. s, p5 x6 X前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 " M; d% d5 `3 j8 }; Z# x  ^
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
- ~. ?0 p# H) l7 b% \1 i的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 . i- ^+ F: f2 d; a( T! o$ r
器的响应后,也原样转发给前端。
$ m/ c8 E2 h' \( B. U$ Q
8 K9 I) Q* R$ P( _因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 * |. R0 G+ Q0 u" M7 ~4 }
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 0 z' ?9 V# a) W: p& R1 J. `2 u
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 + N7 k; K, d9 q6 w

( j. v9 p' }6 T  ]与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
2 l3 y: O% d( v! C7 u件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 / U1 J1 P( D8 o, X7 t" k
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
* o) U% A$ q4 h8 f; v2 R
" T! D: L  Y% H我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 2 L6 _% P* L+ n% w7 {0 N$ ~
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
# Z9 X8 M* w$ |6 O1 N此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
* a* \* w, C- e; K面。
  b6 a* m! T7 b# x4 T0 D" t/ F" t& y2 G; o
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ) C7 J: E9 M4 J9 I
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 4 J# d/ r5 A3 V
利用SOCKS5代理服务器。 " h) g# ^) g9 d+ _7 Q1 k
  |5 S; V- ~( m0 r
一个支持SOCKS5协议的前端,通常具有两种运行状态: , N) _! v. _3 m" k' u9 s
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 * L6 y* i3 y5 z
的。
: m5 q3 U0 {, Y; F$ ^* {5 x. Q# K* H6 C: y1 j  ^! c
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
( V- ~" d6 u- p: H" z送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 - v# C! ^1 S  k4 a# F1 K8 J- j4 e! U
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
) l4 h$ _6 W7 ]$ p9 a0 x( B服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
5 d0 n" T$ I0 `& Y0 U6 WSOCKS 5和SOCKS4相比有所不同,具体流程如下: ; k5 ]  B, l3 e6 X4 s+ A5 ~
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
% M+ [/ F; J9 w( I  X客户端向服务器询问认证方法
2 N/ T. e4 a" k. W-----------------------------------
! U7 `3 k/ _6 A- w% B字节 意义 值 # q0 o7 h4 F- S9 q( X
----------------------------------- ! [" ]% W# J- G
1 版本 4或5
0 P# l% I' s" \3 X2 方法数目 ' q1 j4 n8 V; m4 l9 o8 h) W
3-257 方法 3 f+ D5 j! y: |- @1 f
----------------------------------- . _1 g% |( M7 P2 I
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 5 t% N5 R0 L1 }- h. Z9 ~# k( o
/ y; w- E/ v% i
服务器选择一种返回给客户端 . W* _0 T& c9 x/ H: Q7 r. z& d* b* ~
-----------------------------------
4 w' d4 {8 `9 G: t字节 意义 值
# O6 h: d5 t3 P; H& w+ T-----------------------------------
* D9 H$ ]2 n7 v, t6 U1 版本 5
4 U0 P4 P$ J! j7 h7 f& J- u2 选择的方法 其中一种,0xFF表示没有可接受的方法
5 f1 |; @7 {# S- o. L/ R$ N----------------------------------- ; J( l/ A  s7 J( V

0 i, J. H2 T, @7 a0 f9 e# U连接请求
, k5 {5 X* V" d---------------------------------------------------- / @+ u6 _+ @% [) M/ Y. S* }" I
字节 意义 值
4 [  f3 K! a/ k) }7 |& ]: t----------------------------------------------------
6 V+ m' F1 {% W8 {% T. S6 H" {1 版本 0
) `; ?8 r% x2 P6 n2 命令 1
- R( T  [; S, M7 J" m  F" j3 保留 0
! ~6 ?  [( p/ x- \5 a4 地址类型 1=IPv4,3=DNS,4=IPng
& O% C* y  f. P# F5+ IP地址或DNS名  可变 , o% \( |8 J. w! i7 C' ]
最后2个字节 TCP/UDP端口号    可变 ; O  v9 q2 }; x  C
---------------------------------------------------- 3 T1 v: t# |6 {$ q$ `
$ U0 I# k( r, n) D% ]" Q
连接响应
  s  r# L* ]% E1 b) n7 A' ^0 }/ L----------------------------------------------------
4 _6 ^0 L" o$ ~4 [4 G字节 意义 值
% q, P7 Q' g4 [: u3 c----------------------------------------------------
- i# d$ Q8 _4 x& x1 版本 0 & C6 y) L, u/ i/ A4 T6 {
2 响应 00-08
  g# J. m4 k+ ~* h) H# \7 }3 保留 0
2 _( ]3 o' {/ @& i8 o( }3 F. s7 j! a$ t4 地址类型 1=IPv4,3=DNS,4=IPng
; K7 K0 c7 T) H' R9 s& g5+ IP地址或DNS名   可变 - K. X/ L: e% G) i! Z
最后2个字节 TCP/UDP端口号   可变
. K) n$ |" I) R  X2 L) s---------------------------------------------------- , ]/ D+ d6 s* u; H7 ~1 ?$ e
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% 2 v' E5 t- T4 d* ^
; m" F! L- g8 w5 ?+ R. z
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
8 m! b% g5 @5 ?: {9 Y---------------------------------------------------- 4 p& K( ]; O& u( u5 t9 _
字节 意义 值 / L7 C& P% L( C3 Y* k- [
----------------------------------------------------
: `% ~2 W. y* r: T' A8 d. ?1-2 保留 0x0000
/ X2 j3 P# A% _' W2 ?3 C# [) }8 i3 分段数目 可变,0表示不分段
1 f2 p; A0 X1 m% J, k4 地址类型 1=IPv4,3=DNS,4=IPng / E# {) C9 H6 N3 u" H  ~8 x
5+ IP地址或DNS名  可变
; F  |( G3 d0 C& |$ |9 L2 n' D% r最后2个字节 TCP/UDP端口号  可变
% W6 X( O, V' h  l* h数据 用户数据 由客户端应用程序决定 # J# Q2 X  r; B
---------------------------------------------------- ( U7 u9 c' I' P1 q& u/ Z1 [
6 c' ?4 G8 E1 l$ t, Q0 {3 c& R. t# o5 d, b
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-15 07:45 , Processed in 0.017715 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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