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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
  k7 R) s/ Z: I: b, ?上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
& I- N1 z- a' Q, }: U通常不必关心 SOCKS5 协议。
5 u7 Q; L+ e+ A+ ~8 z" t  a4 Z7 k+ k/ J
& A+ p- O1 ?- u7 OSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
6 P0 D0 y2 o5 W( s" ~# X外部 Internet 的机器访问外部时,有用。
% ?' u, @8 F! H8 P3 S" f* R$ e8 |, ?: h, \
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 , s4 G5 j, l3 Q& {  e4 c+ A
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet & o& t8 j, d& y) q% H% H  I. e
网中的服务器,或者使通讯更加安全。
% Y* R: D- p; {. P$ {
- N: }4 a- n, ?$ t" C4 WSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 0 ~2 R0 e) z: C8 E* R
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
% I) [+ x1 @" V5 ], |5 h7 t$ j* c前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
" V) P( H  r4 i; Y器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器   |* v9 }* k9 w
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 . q* L4 Q; p6 f5 @4 C: I' b
器的响应后,也原样转发给前端。 ; e, C: d, ?9 Q0 H

' ^4 p2 z; d% b( V& y因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 ) T$ [% a5 o' D* g; C
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 6 o0 k% E4 x0 n' j) \' T9 ~: l
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 ! P7 `( H& \; M- ]  Q4 g

# B+ W  H: Z' `! H0 H: S! a" d& g; F与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 % b- M! ?5 M1 C% K. z
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 * B  K: |( I: y0 A
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 - I7 y0 g& n3 ]- A

- e" f* P5 J' e4 i/ |我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 + z1 N6 ?% v) h( c
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
& q. H2 L5 @6 a0 N此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
& O& f6 W5 k7 d" J8 N- [面。
3 J. _3 K. O& ]: W( _. X
" ^" x. B7 `0 x/ i/ F4 E9 L7 `- g不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
% d: F) c' V8 b+ I% D, k地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
: {2 V$ U  c- j2 r5 ~& f利用SOCKS5代理服务器。
2 t7 c6 x- Z* r0 b7 r. M
% G( x3 q% x: c3 E+ Y一个支持SOCKS5协议的前端,通常具有两种运行状态:
3 ?- t' n7 N" p1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
6 X0 f7 c9 R3 P3 z% M8 v的。 ( A. a/ B0 ^" @
! q( s; }' X( C8 \! b) D
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
/ Z+ ~( }# _3 F: R6 p送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
6 q/ s/ z. {  z  @/ y  s告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
. T6 z% `* I5 g- n& c服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 * {- X- |1 F& ~3 J
SOCKS 5和SOCKS4相比有所不同,具体流程如下: + [6 _0 ^* |5 o2 R$ k9 F
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: " O# h# Y+ E* ]/ c5 B9 D
客户端向服务器询问认证方法 : H$ `' X- W, s& [! \
----------------------------------- 9 R% S9 d. v! n* u1 D# k) M! u
字节 意义 值
  i/ j  e" l* O7 Z; q, G3 `-----------------------------------
9 n' Y0 I$ f3 ^! y; O3 W. n) Q" O9 z7 y1 版本 4或5
/ z2 Q. F9 r! b+ P2 方法数目
, w  T5 {+ @( m. n7 U/ r) g3-257 方法 / i( R* H( y) G, j1 x- M
-----------------------------------
9 Q% o# N8 z! G8 w1 G" N%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% ' k7 T2 _5 m) h- ^! m  k

. E) n, e5 G" H8 Y5 m( c) o  K, s服务器选择一种返回给客户端
6 K) p3 T% }! f+ {-----------------------------------   ^0 x+ f+ z! n% X* }
字节 意义 值
4 t. }- p8 H' @: ]3 V----------------------------------- 2 l8 c( u# g* K1 l& V4 K% w
1 版本 5
" x- O) {0 ]7 }1 @  S% r) E! p# J2 选择的方法 其中一种,0xFF表示没有可接受的方法 # I( @" S+ X) q4 k& Q4 Q- z
-----------------------------------
6 o+ d4 _5 |# R9 B- g
1 G+ ~4 c8 V$ O2 n, @连接请求 : ~9 n# ^) h5 o7 T& R7 O
---------------------------------------------------- - `$ N8 R# R6 {0 U+ B
字节 意义 值 8 R1 l% h) k3 g% s
---------------------------------------------------- & |% r- W6 E2 f; u) b
1 版本 0
1 `9 ]+ W6 r  \6 x2 命令 1 1 w% j5 z- B5 y( c$ b+ [
3 保留 0
4 k+ {* B5 ~5 L- h4 S4 地址类型 1=IPv4,3=DNS,4=IPng
  O. N! h; A! Q6 S  I2 B, T* C5+ IP地址或DNS名  可变 . R8 [  m6 k0 t5 z( ^. ]1 {3 p
最后2个字节 TCP/UDP端口号    可变
/ A* t9 X3 i' ?% q- @9 |. C2 r( Q1 I----------------------------------------------------
' j& z. Y: R9 ~- f* Q
  [4 [$ j8 r2 {连接响应
$ `" ~. ?  W! h3 B: S3 B4 M. V---------------------------------------------------- 6 D% d5 T, N% T6 Y& |5 S* }
字节 意义 值
" R+ N! G3 |& }: g* V% B/ o---------------------------------------------------- 6 e' O/ Z# T' W# W* y) w
1 版本 0
6 r# N) n: e% g' }4 o" H2 响应 00-08 / ?' m& |* T+ x- d' ], }
3 保留 0
& C4 h3 N' i# ~4 地址类型 1=IPv4,3=DNS,4=IPng ) B; q; w  P/ M) r9 u
5+ IP地址或DNS名   可变
( V: b8 Z' @: Q1 h8 `6 `最后2个字节 TCP/UDP端口号   可变 3 r5 D% a* a6 ?8 X' l7 I
----------------------------------------------------
5 t  d( q4 N2 N响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% ' V; E% w! Q# {; @# K
8 t" k& `" K& t5 z
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: ) t  I9 h$ T. O$ p' ?
---------------------------------------------------- 2 F$ @5 N6 D( I% j' R$ A6 u
字节 意义 值 4 q, ?8 `! l' Y  h/ j; J
---------------------------------------------------- ! a! N1 ?- {  H" i8 U+ m/ ?
1-2 保留 0x0000
& q% I+ v' ?. u6 o0 {9 @  J3 分段数目 可变,0表示不分段
8 z5 O) d0 b6 A  E4 }4 地址类型 1=IPv4,3=DNS,4=IPng
; v% E7 y: n0 `  ^% a% x  d* \5 }- h) e5+ IP地址或DNS名  可变 : T/ ?8 q' P2 S! W# x
最后2个字节 TCP/UDP端口号  可变
$ c9 T6 ?9 K$ H8 z/ u* p5 m* x; b1 K数据 用户数据 由客户端应用程序决定
$ M5 l+ `" X5 G! x, s  \2 H----------------------------------------------------
( P* U2 O- c! ~! w; I! E( C" I; V
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-9 02:19 , Processed in 0.035897 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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