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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
: [# U0 q$ F1 }9 r  {上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您 8 k8 X" g2 {# N( {: M- j! N6 U
通常不必关心 SOCKS5 协议。
( V- Z+ ~6 A% h: k% Y' X
) \, U( L1 X, L# c' _SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
+ M7 I" Y! A& f3 u- Q- U$ S* g外部 Internet 的机器访问外部时,有用。
. b2 O+ c$ q0 z1 Z
) A% L" @2 j# O, ]1 fSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 ) q, }5 ]/ @4 O# X- q+ i
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
7 C& N& V0 \1 f网中的服务器,或者使通讯更加安全。 , @% y+ a% \3 L. p0 i
9 u6 v4 Q6 J% i
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
2 y/ {9 n- Q, D一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, 5 ~5 }, F! p( \9 Q6 S5 H0 U
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
4 u( R  x: `- v' X. q器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
$ f  G0 b/ ]9 Q# _* k0 A$ m的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
, g# ]6 Q3 s  @3 L器的响应后,也原样转发给前端。
$ w, Q/ w+ e& s# {4 y- C, s/ I9 j
' g: D* c: K1 s, f2 U因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议   k, \  t0 M4 k* y( M4 D8 w
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 ! W9 v2 x  C5 J* l( i5 A) I( t5 g
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
2 N7 S. w( M+ P5 e: K3 i& @1 e5 s5 W5 J+ h! _7 b! [
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
1 |& _; g( b- z8 ^; R: k件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ( }) u4 d8 j; f! O
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 # X% A, }% x) i6 P- w

' w( g* j% }) t) T我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
( U8 o" t4 K7 h办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 : l+ n' d. t, O
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
* z* f$ x8 k% }7 p$ C* Y$ p/ [" X面。
" ^; U5 T& n) U3 r* Z
- {1 w2 Z" s& n不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
" }3 W  n8 {5 @3 c! A5 t! T8 O: l地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 1 m3 R/ s! O+ `  z3 \
利用SOCKS5代理服务器。 ; K5 R% b/ d1 U5 L* w+ J3 [: D: t

" R: @. n3 g* `一个支持SOCKS5协议的前端,通常具有两种运行状态:
7 ]$ A+ Q6 B; B1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
& Q3 X; N  F$ D0 f# E! [, x9 m的。 & x& C1 u* b* k) G
/ c/ @/ c; {% m0 H; u& z
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
: b! w1 f9 ?1 M! `送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
0 w& Z. Y! T6 \) w/ p告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 9 g9 }9 N; v+ }8 Y6 t# X6 |3 A
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 8 B3 R" {1 w6 ^3 a' O
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
8 V1 T6 K) k6 N: [三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
4 O8 u+ P7 g/ Z* L$ p2 A, X客户端向服务器询问认证方法 " m6 Z& G% }* d8 h/ T
----------------------------------- 8 r. z0 ~" s8 d+ }/ E4 j6 o! z
字节 意义 值 % u) e' \; O( ]; B2 B9 p
-----------------------------------
. D' H  E4 ?: R) U5 D1 版本 4或5
0 m' c9 e) J5 @! P4 j2 方法数目 ; o; f) E2 ^  G, H9 k- x- i8 T
3-257 方法
* X, R4 T7 B+ i7 E-----------------------------------
0 u% D% R1 Z( |, ]( _* O%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 4 }8 [# ?- i( M$ `
0 H7 ]( {. T2 i# c
服务器选择一种返回给客户端
7 {& v6 N( }$ Y2 E$ l----------------------------------- ) z* E; N* b) ~+ M/ Z! C
字节 意义 值
! q- \, g& D; D& G----------------------------------- / s; m" ^$ y3 v! ]+ U8 n6 W6 i/ B# Z
1 版本 5 9 b# p# s0 R6 e8 L, m
2 选择的方法 其中一种,0xFF表示没有可接受的方法
3 k' o0 p1 b) w-----------------------------------
0 h/ o( ]& \6 A: h% T& k% j- O* U# l4 n- t3 d
连接请求 % {: W7 o' \5 S" Y" _
---------------------------------------------------- , x) i! v$ b; \+ J
字节 意义 值 ) e4 [' p/ }& S) r
---------------------------------------------------- + P2 \, b# z8 G! Z1 f  W
1 版本 0 * N5 c( T% \( r5 g7 s
2 命令 1 6 ~7 Y  s0 J  q5 \. ]
3 保留 0
$ H# ?' p1 C3 ?) _, v3 w4 地址类型 1=IPv4,3=DNS,4=IPng + N0 B3 u) o  C8 W7 \4 v. L
5+ IP地址或DNS名  可变
1 f, o& ]4 \" M! ]3 L最后2个字节 TCP/UDP端口号    可变 $ }) b6 ?8 p' u0 s) k8 Y! B% }# P0 e
---------------------------------------------------- $ T; ~* R2 m+ z8 ~$ e, P% F
6 G6 a1 L- L( E, p$ w
连接响应 2 z, _+ S6 b# @! W  p! d4 [
---------------------------------------------------- " F+ y4 c$ m; T( e! ~, h, s5 v! A
字节 意义 值
0 T; m% w% @$ I6 i0 B& ~: l---------------------------------------------------- & `9 {6 A! U& q6 U2 C" R% b
1 版本 0
. D  Z! s; x! Z4 ?1 U3 ?) ~2 响应 00-08
& h/ W' r/ u1 ~1 @3 保留 0
2 f; Q5 p1 j+ v1 ^( z* @8 V4 地址类型 1=IPv4,3=DNS,4=IPng + c" c2 H8 L" L' y, o- T, Q
5+ IP地址或DNS名   可变
; s* E6 d0 v' ]8 z2 `最后2个字节 TCP/UDP端口号   可变 $ S% W8 \0 S) g7 M/ o
----------------------------------------------------
4 }$ O' k' O: c" v6 ^* R* g. a响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
8 S, n1 y+ l! \5 }# _/ Q8 H8 ~/ T& D6 z" c2 J: c
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: ; d. A5 N& q4 v- K& ~4 g: c
----------------------------------------------------
: J0 d3 b" V4 a* A字节 意义 值 1 a7 S* {/ C! L9 E5 `$ ~/ L
---------------------------------------------------- - U3 p) d/ p* a$ g8 O( ?: a
1-2 保留 0x0000
$ {0 @6 }9 o6 u/ i9 J7 S! b/ V/ D3 分段数目 可变,0表示不分段
% s9 s0 \; t2 i) s8 @/ g- r4 地址类型 1=IPv4,3=DNS,4=IPng : m6 X( t2 a3 c
5+ IP地址或DNS名  可变 - }: ]- M8 p3 c+ y4 l8 k: t* z1 M+ D
最后2个字节 TCP/UDP端口号  可变
) }' ]: O5 U" t4 a% U9 I$ g数据 用户数据 由客户端应用程序决定 $ j# I% g% C/ P
---------------------------------------------------- , s; z4 `0 j8 y  T/ T: G! C

' d9 y. e- [3 GSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-8 23:38 , Processed in 0.034062 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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