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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
* a) P% L5 J+ ~3 W, S上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
1 v- d: l1 N& x8 J, o0 k通常不必关心 SOCKS5 协议。 . u: [% _5 M4 [8 T
* q7 D8 m; L$ ], b# b
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
6 S: {! w( Y" K* E) P$ X# v7 U外部 Internet 的机器访问外部时,有用。 # j; H( i) B* ]& u$ l6 A" v

: Q! _; b( o& G" o+ b, USOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 3 f- E* v$ [8 Q
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet ( w7 B! ^* |: P' M$ @+ u& X
网中的服务器,或者使通讯更加安全。 6 i2 c! |+ n1 x+ Q5 b9 @
8 c( @6 M' v/ N! l* J  T) C) I
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 * Z4 i$ v/ Y8 N9 S) a
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
: r% _7 B4 z* f  C前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
3 @5 ^! i% }0 e; w' A4 a; H器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 - u$ Z+ |* `+ \* ]' g7 e: _
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 / {; s7 o  k/ T9 m' D) w- p
器的响应后,也原样转发给前端。 " B& l5 Q$ F$ R- j
; M0 p# k- Z5 U  R% K) P
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议 6 L$ F5 d8 A/ E3 R1 j7 \* c. k. j
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 , C7 L, Z, M4 H; @9 c
是它能够忠实地转发通讯包,完成协议本来要完成的功能。 2 D) J: }: O- v" z! {: W, F

5 @, {7 j5 H! n9 L  d与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 * x$ e/ j! l6 U: u% m8 U/ W. ^
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
9 K" }0 N* k, W' m! o换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 # I& b" U8 i: M* u" B
; c' d6 @7 t5 d, ^6 N# V. ?6 G
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 / Q- A/ u9 u# ?9 s) D. k) M
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 2 X' l# q) y2 o) r# |( [
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
, y9 R) ?, m+ z4 }+ }% l面。   _' k/ G2 t; }% F; v6 Z6 j: w

! k! z0 @7 j( H$ d不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 9 b- S  Q0 I/ E% X
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
* \5 M& @3 M: Q  n8 l7 n利用SOCKS5代理服务器。 ' K: W' A. Q1 z+ K1 E8 W

8 T+ z( b' Y( f* h9 j9 I一个支持SOCKS5协议的前端,通常具有两种运行状态: + x8 C5 ?% k, l# X* M/ z
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 * S8 v" L5 a; s* w1 m* Q( q
的。
5 \/ ?* p4 Z6 ~& G0 `& ]' F6 L  p$ d: a( T/ K% D
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 4 j# e1 T6 b0 a% ~
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 + ~8 P* r7 J" F' i  i
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 ) O8 U# ]( \* W0 G5 X6 @
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
/ V, M+ s; v& O- w4 ]5 ^SOCKS 5和SOCKS4相比有所不同,具体流程如下:
$ g3 @+ E) r, T# j% V7 x三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: + Q0 Z$ ^- x( a+ v8 V, A8 v; f
客户端向服务器询问认证方法 ) d! G; u% E2 V0 _& K2 P+ F
-----------------------------------
: i) \+ V  N! ]' E1 G8 B& a* E字节 意义 值
$ k4 b6 l4 I) R: M6 d' F8 {-----------------------------------
7 i0 `8 G4 R% k: ~+ a9 `" w1 版本 4或5 ! j5 s% \0 F8 h8 |9 S* b
2 方法数目
  w* n% r0 ~# e$ V) L  }- }: S3-257 方法 / e! x; N$ s$ ]& s
----------------------------------- - j" l( s/ S  D0 w% P0 o5 t
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
- v2 M/ ~) ]6 Y1 A, ]7 n! A* U( N& }! a( ^+ ~$ I6 S
服务器选择一种返回给客户端 ' M' k# O0 \. \& Q
-----------------------------------
& V& V7 t( s) U- B8 H1 O字节 意义 值
& ~' d3 ]. W0 x. t' E1 B6 c2 f----------------------------------- - n) f. n, ]# O1 p6 a" C; c5 e
1 版本 5 4 T4 j/ _% j( A1 d! s' ~$ b
2 选择的方法 其中一种,0xFF表示没有可接受的方法
5 @4 ^# n5 ?( L$ L* v# N% L----------------------------------- 0 E9 v- i) K* Q

3 r4 D4 E8 `3 ~0 |* Z; n2 S0 e连接请求 % o8 }' C! r% P" ?, V
----------------------------------------------------
- P9 o6 ]; E; m4 m  Z9 B字节 意义 值 5 ^  O* ?0 T1 t' ^4 O5 z
----------------------------------------------------
2 k6 |' m# s+ S5 L1 版本 0
- R" Q: r" d" K! S2 命令 1 + ^" T; U2 E+ T9 o$ z
3 保留 0 8 a' ~: e7 O; Y* ?) B6 L; \) @
4 地址类型 1=IPv4,3=DNS,4=IPng " K( I% p! `/ H/ a+ \3 W1 C- z# B
5+ IP地址或DNS名  可变
5 L+ p. m- s! j5 {9 M% y1 g! X* b5 p最后2个字节 TCP/UDP端口号    可变
, n8 E5 h. }" X  A2 j; S---------------------------------------------------- 6 h5 e& K& \7 R: \" ?

0 [- J2 g. M& t; S& m$ N连接响应 9 E4 I6 A2 b$ A* a. u/ k1 P
---------------------------------------------------- 1 x" l; Q* Z8 ^/ ]# D
字节 意义 值 & S) m( S* d. M) L) x( e0 ]
---------------------------------------------------- - v5 j, Y+ i8 B( L
1 版本 0 0 d) u" M1 V( F; b4 p% R: w
2 响应 00-08
. k: d3 `9 L' @# y* q& L3 保留 0 . Y3 k1 {7 R9 d8 C' U% U" i
4 地址类型 1=IPv4,3=DNS,4=IPng 8 y7 x+ s. R, c
5+ IP地址或DNS名   可变
+ a9 _; N# D& o- u, j3 D最后2个字节 TCP/UDP端口号   可变
1 {! ~0 a; D, z- W% T  P----------------------------------------------------
# d. e3 \4 |% L响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% 7 T3 L( I4 i! p+ @. ?+ g. B

6 b1 D2 j2 \( l/ F0 P7 n; b. FSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
4 t8 w. F8 m) b* N8 n* n---------------------------------------------------- ' h8 u1 H) i, x( J. K' S2 N4 m
字节 意义 值 2 R: j& A) L3 Y
---------------------------------------------------- # z$ ]1 }4 i, ?/ A8 h3 S
1-2 保留 0x0000 ; H" R( ]9 m1 ?% a
3 分段数目 可变,0表示不分段 & w6 X* j9 [3 @( r
4 地址类型 1=IPv4,3=DNS,4=IPng 3 _$ Z; Z* O7 X% c+ W9 f5 ?% ~
5+ IP地址或DNS名  可变
+ Y# h3 L+ L  v: P6 b- A" U最后2个字节 TCP/UDP端口号  可变
+ N; l* ?1 R1 q2 n3 T1 Z0 f# f7 x数据 用户数据 由客户端应用程序决定
4 [& G, m! E' a+ F---------------------------------------------------- " X) ~$ z3 ?! Z

$ R) I+ A- @* xSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-15 06:33 , Processed in 0.019309 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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