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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器 " B7 _# E: \7 k0 g2 o  U
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
+ w" ]# L9 b+ G. v, V2 l' n通常不必关心 SOCKS5 协议。
4 ?+ M3 U) r$ \/ U9 D. \
$ ]) b3 B3 t: A, o  i; aSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
: B' s  u* B9 `9 S# g! W外部 Internet 的机器访问外部时,有用。
9 m; t4 l! F( X8 ~8 J# \  d' S$ Z! }, S
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
# @' L4 u# E4 W0 M& \4 }机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
% D; e& o0 \4 O5 n4 i! w  l网中的服务器,或者使通讯更加安全。 / \0 H6 |# L& ~# B( ~

- J! e- T  s+ V3 \  ~+ d1 rSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
/ n+ G8 G9 I; v1 }一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
) Q/ m# y% n, [前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 6 y! X* Q2 w# q. A( C" B% o% x
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器 2 f6 [8 `$ _' l
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
% r' H3 u9 p3 W7 l0 P器的响应后,也原样转发给前端。
' R3 F# ]) O5 C: j0 _3 ^( C' j. u
* d( n: H. S# ?: H7 H8 ~3 T& F因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
  b) p6 |5 p  x3 [, j/ S1 {都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
4 y6 a# s' ~9 v是它能够忠实地转发通讯包,完成协议本来要完成的功能。
4 z0 v7 d5 I8 d
  U+ J+ s! a; S8 c6 I与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软 & T8 P( m" I  l6 j# }# Z8 `4 F+ I
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
/ A$ }' ~  Q9 j. l# p7 N2 R换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
) z1 C- a% l, I1 }. o2 c7 R, C1 j" B
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 ! E! m- @8 v# E) |: f  e
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 & U/ N% F3 G6 Z( _* m
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
& Y/ U4 G+ O1 ~- l& }4 u面。 " l/ b$ p2 h( C+ c% b

4 C$ G/ @- T- s9 M$ u" X不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 0 l- P# ~0 v0 C% f# k( D7 c( C" N
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
% z* l0 d; b8 `0 ?( d/ N1 m0 v; C利用SOCKS5代理服务器。 8 y: B* G0 G" ^# \' h: `/ z8 _

9 }: Q7 x0 h" D0 B" r8 J9 t一个支持SOCKS5协议的前端,通常具有两种运行状态: 9 ], [. N  a1 R2 \6 ^# z- Q  a
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
+ T6 `) Q" C# w9 q' \的。 ( n& S: H* i% L* `7 t* s

+ [/ p( H; S2 w; i7 r4 E' [! O; z2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
2 ~; x4 y+ n0 {( G) j: r送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
( M  v1 @8 {" a告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 6 F& D+ t% X" u% x' |
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
) d) d" Y# ^- ^# b* ^7 x' ]& [; wSOCKS 5和SOCKS4相比有所不同,具体流程如下:
4 K5 q1 R% G0 }9 P1 {9 I三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
* T7 W: N; s/ u9 B客户端向服务器询问认证方法 " G, l( }5 _& D: r
----------------------------------- ) D& M9 l/ A3 g' |  r1 m6 F
字节 意义 值 % O  j* Z6 B! i/ D% J9 X& `  K+ h0 u
-----------------------------------
% w' `/ i- x! j+ A- s2 ?$ s3 a% c1 版本 4或5 - E1 a, k; F9 ^6 Y/ O
2 方法数目
5 H8 [& `1 f! y+ M# v! ]' @3-257 方法 1 g# U0 l% K* s. T) a  i
----------------------------------- 5 B/ V9 K$ h% T& x/ b$ i! X/ A
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 8 p3 [  D" n2 I# R, {$ g8 M

) v: R6 X5 |! A4 `  A4 t服务器选择一种返回给客户端
: E8 e( H% F! c-----------------------------------   u. D# ?! B5 S* D
字节 意义 值 , ]5 F" }3 c, X7 q* P. ~( V
-----------------------------------
/ S, X( j/ I' L0 H! C# X: a- U1 版本 5 7 l  g5 X5 L. ^
2 选择的方法 其中一种,0xFF表示没有可接受的方法 # p( R# q) G$ d/ {
-----------------------------------
" m1 Y1 y% J; p; L4 u( X- q3 x% E/ S6 l
* w8 W0 g& @- o: m连接请求
0 ^* G% W! {4 \3 r----------------------------------------------------
: R: J, p9 \3 \' h- P3 k. D字节 意义 值 - i, V5 N) M% i' T/ j" D
----------------------------------------------------
! c/ N% H/ u1 W% S1 版本 0 4 e0 [$ s0 a, Y4 p, u
2 命令 1 9 T5 w& s- z& f' u: f
3 保留 0 + D- D5 s4 N0 N7 f1 P/ h
4 地址类型 1=IPv4,3=DNS,4=IPng
. u7 v) x, {8 n7 F5+ IP地址或DNS名  可变
! X) m% E4 k5 r7 h" p7 o9 s8 {最后2个字节 TCP/UDP端口号    可变
$ g& c' v0 ]$ P7 E5 m---------------------------------------------------- / y( D( J& d' |, p

5 y; z' ]" i5 y: w/ h  j# X6 V( P连接响应
7 J' _$ h: H, J6 U4 ^! M3 `, I# {7 L---------------------------------------------------- , g0 c/ a5 g* A9 k1 ]
字节 意义 值
; \' V2 d4 G; z, ~# w----------------------------------------------------   u  b6 O: Z( Y/ s  K
1 版本 0
! p+ A0 b$ c8 a7 T6 K2 q2 响应 00-08
& Q4 c2 c! J3 q7 o& Y; N+ t3 保留 0
8 x/ p3 m6 s( |, ]* |/ E+ a4 地址类型 1=IPv4,3=DNS,4=IPng 4 s7 r; A# Y. R
5+ IP地址或DNS名   可变
" s' s# U, @) V9 n0 x5 R4 Q最后2个字节 TCP/UDP端口号   可变
% P- E& q2 W' F3 L! v! |3 j----------------------------------------------------
# w& F6 C6 p, G! L% A  e响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
4 O9 X9 T8 j) m* D1 P" B5 @% U
" R% t3 T# p, S; H# NSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: & e2 \* M- C8 M0 I) \3 K
----------------------------------------------------
5 \6 `$ L: k3 D4 `& {! C. E字节 意义 值 0 m7 ^" Y  ^  Q; d% M+ p1 t
---------------------------------------------------- 2 s3 s2 Q( w) J( ~
1-2 保留 0x0000 + y% [, ^+ E, o' q
3 分段数目 可变,0表示不分段 2 O+ E, }. n2 x: C: @
4 地址类型 1=IPv4,3=DNS,4=IPng
$ O/ ~# x4 b! o( K4 k5+ IP地址或DNS名  可变
' w: j, `- j. `  h, {最后2个字节 TCP/UDP端口号  可变 , E8 G& K7 M! b( d% L1 E# C# r! [1 i
数据 用户数据 由客户端应用程序决定
  `+ g; I4 _* d' U  D---------------------------------------------------- 0 p- n# `, O, N( b( i6 q( Z: V
- I4 Q2 S& K7 N  U& g
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-2 10:32 , Processed in 0.019111 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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