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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
, w( v: }3 k9 E/ c, c上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
, r8 Y. i. A# [) c$ s% @通常不必关心 SOCKS5 协议。 7 m+ h2 V2 Q& p
3 A, \, m1 O9 F
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通 - \6 ?+ U8 r6 S# l
外部 Internet 的机器访问外部时,有用。 & ^% [; n- k( ^8 v7 h
' z; s8 `) l) t  T7 G; x- i$ ]
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 8 g; Y: D3 j, K) z4 H
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet + H' H9 f% g# {4 q
网中的服务器,或者使通讯更加安全。
% [  y3 b! G  m1 y0 G( n
0 L5 @3 q- F# ~0 _. c: E1 w" u% CSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
2 y% Y7 h8 ?4 V: M  R5 l5 s0 R( }5 C; a一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
  w& n! k2 \! ]% o. I前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务 1 }8 \. c- P, B, G5 ^0 \" j
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
( z9 \4 W2 T& O- X的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
. K! b8 _3 w! T  a& o器的响应后,也原样转发给前端。   \- D9 r2 A% {; n! z8 [

2 o# Z( K6 h, L$ c$ o( c! b, a! @因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
0 p8 d- |% o- g$ o5 Y% z) ]0 l都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 ( o% t- q7 M# |4 ?; s2 P
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
- v$ O5 V2 d# x/ E% n* y; l2 f7 n
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
" {4 j' g, A! h3 h$ L; U& R9 B: H件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 & \' P6 C. F9 M( h
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。 + L+ Y- o6 r( J6 u. v
: B) W2 ]- h% z# _4 {! S/ k
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 - W' ~, I  Y' }6 m
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
- L/ z+ [: F2 ^, T此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局 * e; Z. d8 L0 {- ~1 l: Q( x( _& a
面。
/ R2 q& {* _, _' h+ i+ V
( D& X' b( h* e不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 0 C6 J9 o4 z6 u7 \
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能   F8 u) m' f  h" ~" H# y
利用SOCKS5代理服务器。
7 Y( W/ m% n# w+ V& }2 A! k5 }7 X( H) P" M5 F7 z. Y1 d2 p
一个支持SOCKS5协议的前端,通常具有两种运行状态:
) @* b" j7 |; U: c: m7 o9 I) {1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
% V$ S, i- M% k+ T: o的。 " k1 C# J, p. ?  y4 A

) K- N: I$ @( s/ _2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发 % v$ L8 B. Y1 n8 q2 p( J! m
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
! H& }4 q: \) d  J3 \- B告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 % A' g3 v& x2 {
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5
6 {. D4 R$ H& t* tSOCKS 5和SOCKS4相比有所不同,具体流程如下: ! \4 g4 D) V% j
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下: 0 r1 V2 c; ?5 t- T9 \/ ]+ N! y
客户端向服务器询问认证方法
7 g/ N9 g3 b# k$ I) x-----------------------------------
" {, t% U3 A4 X6 E( e2 f! @字节 意义 值 * C! x6 F, W& p+ z
----------------------------------- 7 Z5 n9 d* r3 I0 R% v7 V
1 版本 4或5
0 l3 q3 L" G& I! d3 l2 方法数目
+ D  G" z$ E4 M* @, s6 V3-257 方法 : F  |4 ]5 c; F7 T2 R
-----------------------------------
5 O3 s$ K. O9 J. Z; Q%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% 5 P3 ]1 d6 l3 Z* f) I
! I- {/ Q* J2 Q  N1 m
服务器选择一种返回给客户端 9 ^0 h: e+ e9 p4 R+ s& N
-----------------------------------
1 D9 ~/ m, u* D7 _* [+ H0 y  H字节 意义 值
# O' Z. v# }# D0 q-----------------------------------
  u) Y/ k/ Y1 }  `7 e1 版本 5
1 ~! e+ I/ z' F8 T0 M3 Q2 选择的方法 其中一种,0xFF表示没有可接受的方法
" C" ~, R8 i; S9 j+ f( r-----------------------------------
# B+ U0 i0 X4 v7 Z
% i8 I. J# H9 K! q连接请求
: K4 g! G3 K; S----------------------------------------------------
8 U- `+ \- E/ ~& y字节 意义 值
$ V6 Q2 y8 E  R- `$ U& q----------------------------------------------------
: Q9 ^  U5 D( m* n5 r1 版本 0
- g, Q' X* o, r' q9 c$ q- \$ [2 命令 1
. J. y- l3 ?3 a+ }& p8 x3 S# @1 ^3 保留 0 7 [) f( _. y; O- S
4 地址类型 1=IPv4,3=DNS,4=IPng
9 Y, r; t3 z# ?2 o' R* n) c8 |: A5+ IP地址或DNS名  可变 $ R  z- P# |+ h2 I- I5 R/ z1 {
最后2个字节 TCP/UDP端口号    可变 ; T9 k* x. X2 y- }' M0 W7 x- \- i
---------------------------------------------------- . o' T  L$ E9 e) z1 n9 a
( d* l. W4 I9 I
连接响应
/ Q- {- Y! O! O) j  j9 [, d----------------------------------------------------
% W  Q' s0 d* i; ]* ~0 V字节 意义 值
% R& d2 o# ]& C' c+ a5 p8 Z3 `/ N---------------------------------------------------- 1 g* W0 T& ?+ p( C3 q6 Z
1 版本 0 $ L! J; b8 M7 `9 W% O
2 响应 00-08
0 l7 [( D1 t6 g3 保留 0
: I; ]3 Z% p) f; y4 地址类型 1=IPv4,3=DNS,4=IPng
. E( G4 h( Q* C4 k' r" x5+ IP地址或DNS名   可变 ) H  i+ t5 I4 i9 k- ?- v2 ~( v
最后2个字节 TCP/UDP端口号   可变 2 a  d3 ?. O* e, s  s
----------------------------------------------------
  \  _: f$ T. ?响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。% . O# Q$ S* {' q, ]9 \& b2 I4 K

  M5 Z/ R! |  l6 z2 Y" mSOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: % Q6 y% ~% n% X) J7 Q# p- A
---------------------------------------------------- , u& U7 |5 z. h# t# t" u
字节 意义 值 3 a9 h1 N% n2 @! R/ e* _9 L3 w
---------------------------------------------------- ( Q& r/ {1 x3 s# |! E4 Z
1-2 保留 0x0000
# }% ?# h# c" {! h  v  r& i3 分段数目 可变,0表示不分段
* E/ p. X- ]* q/ o4 o% s4 地址类型 1=IPv4,3=DNS,4=IPng # \; k) N8 j5 E" i: V
5+ IP地址或DNS名  可变 / c7 ^$ y0 L" i9 ]! I9 w* o
最后2个字节 TCP/UDP端口号  可变 3 {( z. }" `! ]  J
数据 用户数据 由客户端应用程序决定
, A4 i1 O; e! r: {: ?( j* P8 G----------------------------------------------------
3 y$ y- g2 ~# ?& A2 i! u: v
" @5 o, `. u( ]) hSOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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