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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
4 F  L: N: `" h2 W& u上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您   `( |% A2 p- }+ x$ H  ~/ W9 o
通常不必关心 SOCKS5 协议。 0 g- @1 S9 A8 d: Y2 g. j# l1 ]/ t. ]
8 |2 W/ N8 y3 \$ I" `
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
; V7 E! C- `' c外部 Internet 的机器访问外部时,有用。 / W/ {. m- p: q- J, O" n" _7 U0 v; p
0 G6 R3 P( W5 O% M- i" K* P. Q
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
) G# J6 L8 L( |. A! Q4 C" p机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
3 @, C) @! T1 R/ D网中的服务器,或者使通讯更加安全。 0 P' a$ _9 i+ J+ w5 M
* b1 ^  c0 M: G+ A1 L7 o1 _0 W
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 ; ]% J: u. h4 n1 K% n. r
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,   @6 h6 L. V& [
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 4 N9 E+ U) }* H" \2 o# @% G# \
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
+ O9 `9 ^& {! y$ m. T的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 - e$ P" j7 r8 s8 e6 b% S
器的响应后,也原样转发给前端。
" L3 c/ ?" j; {+ S/ f' L/ Q& _  a, I0 ]1 N# R% h
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
) S, i% B( Z- a6 _& B7 @都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 2 F2 `, D. M' a5 V* r
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
  |. l3 G) M! h7 x8 X) S$ y1 d. Y
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
4 [, s6 E; l- x0 ?件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
4 c' j0 B4 O  |换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 : l: @0 z4 X. q
; T  n4 h8 `3 t( B3 ], l1 E0 R
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
0 p/ d5 {7 `; l) x办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 ! K5 v' z! @( K, U; R1 o( n9 D: f
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 - E- a  I9 p, ~- t8 N9 j) m/ d6 }5 n  `
面。
$ J2 ^* r+ _6 K7 \2 M- I, k0 A4 P* {$ E9 `6 t1 V$ t% n2 W
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ' x# a$ z; a2 b5 t9 T8 ^& k* ?
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
) r2 W5 N7 C: z. `( H6 W利用SOCKS5代理服务器。 ( Y6 T# E9 ?9 W0 z- ^9 r# X

. [1 V; [; c! d; }一个支持SOCKS5协议的前端,通常具有两种运行状态:
- Z6 J# p- W  {7 j) M1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 / D3 G/ k4 S. W0 u4 I
的。
& ?  \6 i9 N7 G: s
8 Q$ N( y9 {4 u$ ^$ X- B( s2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 : u$ w. P9 I. }+ l. ]
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
9 z) @5 m5 j0 n  A+ V( X告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
1 V$ z: M* k! ]# ~& d( ]" S/ H服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 % q2 {8 b% R7 l# w% T  \) m  v
SOCKS 5和SOCKS4相比有所不同,具体流程如下: 3 o3 @! s  i# D0 ~4 A; E2 M  I
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
* b. A+ E  F7 \8 s客户端向服务器询问认证方法
9 I/ K7 h% U/ T----------------------------------- " w( T% I8 ?0 K# V
字节 意义 值
  ^3 q: Z4 b; {; P5 \  n5 |+ C/ C- b-----------------------------------
/ q3 R  _4 ]) W8 |/ Y0 M$ k1 版本 4或5 9 s$ P1 A5 e( f, q4 d0 E
2 方法数目 * Z% {2 P. x/ D9 f9 v  B2 L
3-257 方法 7 P2 [/ g& s% L- y
-----------------------------------
, {; s% }. A4 j$ m) v%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
+ H) n) H  R* P' d% A+ L5 r% U5 ]% D/ D* @8 M+ ?) q
服务器选择一种返回给客户端 + R2 a- [9 X1 B3 X' I4 O8 B9 z  M
-----------------------------------
0 |. u# X6 f3 T, k( ?. N字节 意义 值
' y# j: @/ G2 V% e) Z: A+ g6 h% U----------------------------------- 8 P; ]. L- A  M3 I% T
1 版本 5
; X% z2 O0 M. r, k% n2 选择的方法 其中一种,0xFF表示没有可接受的方法 * {) u# K6 l4 @- X8 F
----------------------------------- ! g: {7 l6 ^: `6 v- C, G9 I

' ^0 S  q& [9 \连接请求 & P4 X! ]- M4 |+ e- e
---------------------------------------------------- 8 O5 Z) L% o2 ?0 ?
字节 意义 值
1 N$ S7 T" ~* E---------------------------------------------------- # f6 O* D7 l! |/ F; G& _
1 版本 0
; c# Q- P) `; I, l2 命令 1 $ d9 p* e8 \; C9 [$ v. K
3 保留 0 ; L3 \& U3 u  @3 x
4 地址类型 1=IPv4,3=DNS,4=IPng + c8 R* `" ^$ g
5+ IP地址或DNS名  可变
$ P2 z# ?# W( b( G  \( K0 ?5 A& z最后2个字节 TCP/UDP端口号    可变 & T6 ]. c' f' L
---------------------------------------------------- 1 y+ s+ @4 Y  ^' z3 j( ~& ]

" ]& _0 e  u% ]5 d5 v1 q- S连接响应
7 D6 v$ t& U; \2 M----------------------------------------------------
! o; U3 y6 p1 R字节 意义 值
% ^5 |7 I0 I6 R4 `( B---------------------------------------------------- / e6 v% e4 r# d! E" Y2 L3 N, F
1 版本 0 , p# r4 }0 I7 b, q* r
2 响应 00-08 & p1 r9 s+ Q- E2 i
3 保留 0 / c* f8 Z7 @0 z+ O+ I
4 地址类型 1=IPv4,3=DNS,4=IPng
1 g. j! C. U# U0 M, S5+ IP地址或DNS名   可变 % D! o2 t, [2 X! t; R) x
最后2个字节 TCP/UDP端口号   可变 1 ^% m1 Z' F6 R; T- s1 [
---------------------------------------------------- 3 r: a+ B8 D: Y
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
% ~0 A1 J) I" P  }/ ^
) k8 n4 E) h+ j( ZSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
0 w1 `! F0 k! T----------------------------------------------------
# p" U0 m  U/ m  w$ O字节 意义 值 7 J* E8 E& d& ^1 x" c
---------------------------------------------------- 3 V! {: j, K9 {  [
1-2 保留 0x0000 ) w  m: r8 x. R
3 分段数目 可变,0表示不分段 ! }8 w! c$ O" \! x6 s( H
4 地址类型 1=IPv4,3=DNS,4=IPng ! b, J. `7 u. _
5+ IP地址或DNS名  可变
, t. _, t; l4 k/ k, W最后2个字节 TCP/UDP端口号  可变
9 @( w! u; o( |& q( ?数据 用户数据 由客户端应用程序决定
' M! ?8 F" |  w! v& V* ?: k7 D) r: q----------------------------------------------------
+ N, K" M5 g5 D$ i! L
7 t0 x, L1 K  X, n) cSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 00:41 , Processed in 0.019967 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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