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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
# j/ @" r1 t* C4 m' }上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
# z) J1 V# b2 Z4 n! G通常不必关心 SOCKS5 协议。 ; N  f5 p9 _( L% X  C( ?7 ]
$ \' E5 c2 a8 x, Z$ L2 N9 A# D
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 $ E1 @, r& o, g6 l2 S
外部 Internet 的机器访问外部时,有用。 ; u9 M$ k) q3 ?! B
6 q! w" ^2 J6 f
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
& J, S6 B, `$ Q! ?机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 0 `& w' `7 k1 J+ I
网中的服务器,或者使通讯更加安全。
9 l% z4 {- l% G9 x" y& ~7 q8 a4 E
: z$ E& T7 u. u* YSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
. W- t8 k: J: }4 V! ]* T一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
  J$ i; N1 Y3 c; F/ ^前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
8 X: g8 {: X9 @5 c器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 0 j( D4 h" U1 O
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
3 L& t% }7 H4 D* q1 R$ M, N器的响应后,也原样转发给前端。
8 @. u3 b, H$ |1 p( J5 B" j2 g* U& J) k) s7 F! W
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 % o! i3 b$ M, l; y/ G) Z  [
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
% a2 J/ G& e% Y5 D是它能够忠实地转发通讯包,完成协议本来要完成的功能。 + U; x+ N4 Q& ^( D! f, u

. V" o; }! v4 O: D5 P% V- c! M$ e与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 ; K( \+ M! y7 |" \+ T0 O/ ?
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 8 m% a/ t' p/ T
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
, C& I1 q  p- f1 N! c+ E8 o+ C3 p% a) k8 J
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
- W, {2 V5 l* W' f/ Y- p办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
0 _- C, W/ {: k1 z) a此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 ; S/ U; E. S# x# s, ?$ d! M
面。 # v( ]7 _) c" n" h+ s* O* i
- M* R7 C: v1 N) O
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
% `1 n* Q8 n  o/ o) v/ e( q地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 0 [$ W  r5 W3 v' q& U
利用SOCKS5代理服务器。 ) D! A  Z6 N4 r
7 Y% d% L" j) z! H
一个支持SOCKS5协议的前端,通常具有两种运行状态: + X" E( k) q& @( d" _
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 3 X' P3 W4 K6 p' i( q
的。
, R9 K3 e# Z$ F3 _. P5 b/ o2 k6 \  s7 R) d
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 , \6 K" U8 C* Z$ t
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 ) v4 W" V" L! `  m1 {5 h; [
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
/ `. R% P  V( c6 s2 o( B# a6 T3 e" I2 G. I服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 8 `. `6 m" O3 E" v* w% Q+ F1 \
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
1 [6 y: y& P3 l. F三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
9 j8 x, c7 L" a客户端向服务器询问认证方法
! u; Q4 v( L# D/ Q/ v( e, X1 J-----------------------------------
' N1 h. X& K' A% s$ I字节 意义 值 # W6 t4 C+ O0 c8 A' ^$ y1 a  W: I
-----------------------------------
* D" B5 @; N- `8 S3 K( c- }1 版本 4或5 4 V: u8 m" Q, x; {& s
2 方法数目
5 d% V9 f- `# V  S) o1 ^  g3-257 方法 9 C" B, K- `# k( C+ E3 g& R
-----------------------------------
2 z# B0 V9 f! X  R" ^2 X%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% / i6 G, N; [+ M; t

! _" c" G  P6 c" F. i服务器选择一种返回给客户端
8 i7 R( H7 q& e; X1 h0 I  |7 C! e8 @----------------------------------- & `: f' ~5 l% E0 e
字节 意义 值
( ]8 I) d7 R7 D----------------------------------- 1 e. D0 ~. J% b- r( P, E! P
1 版本 5 7 U: a- G, Q+ v
2 选择的方法 其中一种,0xFF表示没有可接受的方法 + L& D8 V+ E/ r- I5 |  _, j. S
-----------------------------------
' \6 L' f  o! R6 Y: V" }1 b( r  J3 R7 l* {0 r$ G+ Y  T/ W
连接请求
% n6 i- _6 U' c9 e3 f9 Z---------------------------------------------------- 1 b; }" D0 G4 E* q7 r; _* |
字节 意义 值 2 {; J; a  U, |. j$ |
----------------------------------------------------
7 V; [+ S& C9 W$ i. N8 z1 版本 0
1 m$ {- c. ~8 h4 j2 命令 1
/ W: ~3 Z) D5 ]0 ^. r0 C3 保留 0
, t+ j$ T$ l# O8 ^% }- a: y! B4 地址类型 1=IPv4,3=DNS,4=IPng 2 A' n1 t. _$ g6 Q1 f" m7 E; z
5+ IP地址或DNS名  可变
5 a5 Z& M% m4 Z* v% X8 v0 b最后2个字节 TCP/UDP端口号    可变 4 F  N/ Q3 F3 x% Y1 V( \/ R5 R
---------------------------------------------------- / p+ Z# z. W8 U" ~& c9 i

/ M8 O% r* V! J' E" l连接响应
. J: M. S& z+ `2 o& U2 r----------------------------------------------------
6 ~. a# Y2 ]' x9 k" s  K字节 意义 值
  s6 a: A9 D5 `0 ]/ W----------------------------------------------------
6 W+ L2 ]% J% c/ _* c( X4 i1 版本 0 " N, ~- W1 Z) S8 k, f: W  ~
2 响应 00-08
  R4 C$ x- n$ r8 u: ]3 保留 0
+ z* G* {) `' V4 地址类型 1=IPv4,3=DNS,4=IPng
2 p7 m5 g! q, {9 ~8 X8 w5+ IP地址或DNS名   可变 + X( z+ n% U1 |$ p( g# y! P. M
最后2个字节 TCP/UDP端口号   可变
$ k/ M8 C; W. q3 ]- M---------------------------------------------------- 9 ~# w3 k/ \: h1 G  E
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
& ~6 r6 R: o/ V8 i9 E( m* T' F6 P( K5 w1 Z# N' C- b5 J
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
* H- S' Z. ?$ e% _( N5 r---------------------------------------------------- / \( Z3 s" Y, c3 S$ q$ O- W
字节 意义 值
2 p( g' q  g& _. m----------------------------------------------------
: W9 |: p3 C7 S& m4 e; {/ S1-2 保留 0x0000 7 d: P; x0 Q5 Y' z* Q+ ]8 f* T
3 分段数目 可变,0表示不分段
+ V& s! |: B" z# U2 }  e3 {4 地址类型 1=IPv4,3=DNS,4=IPng
% n9 u3 {- Z' i3 V5+ IP地址或DNS名  可变 + H$ Y0 c" C' n0 {1 p5 z
最后2个字节 TCP/UDP端口号  可变 " n0 O) K3 Y7 b. L$ P
数据 用户数据 由客户端应用程序决定 % p. y8 @* ]' C4 l/ @9 _
----------------------------------------------------
; Y9 z+ @, p! C; n3 e, v- N* u) q; M7 \' O
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 00:05 , Processed in 0.036162 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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