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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
' K9 m+ G4 A3 ^% U$ e$ y! S! e上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
! Y4 u, H* F6 h. D# P) _* {通常不必关心 SOCKS5 协议。 - ?+ i1 E+ y. x$ j
% v( y3 N9 K9 `+ x% r; `, P
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
% r( q- q. v/ F( i  N) t外部 Internet 的机器访问外部时,有用。
4 v- _3 s' G7 R) l) v
3 ^8 F' t5 Z7 `6 A( N- BSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
, G) \4 `7 t6 V机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
9 k$ q1 B6 ?- Y) t6 K网中的服务器,或者使通讯更加安全。 2 g* ?' n' \) B. W' w
- y% D- O+ \1 ~# _
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 6 }! K& Q# J1 o/ j$ i3 ~
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
  i, w2 J! S  M2 b8 g8 C前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
1 F$ n+ T! j) j7 q器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
/ P( z& o) _/ Z; [' b* o" s5 `2 i的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务 0 |5 ]% A/ G# a8 q# ]
器的响应后,也原样转发给前端。 * k5 I7 f3 M- `  b  ?- x0 A9 `0 v* h
  z$ E, _8 G8 e2 a, O
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
' a& r3 {2 Z; F. Z, E! m都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 . H( ?3 }4 E# N0 V9 q* o
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
4 J9 B- A8 i/ l+ ?: _+ m% W2 K+ f% ]6 D9 U% B* B
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
/ \% Z3 u/ V, A6 G2 u件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ! q: c- v/ v1 d- b9 L
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
0 H% u4 }8 P$ u. d' g3 A
7 k3 t  n$ X4 _4 H! _% a1 L- l/ _我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达 8 B8 h$ W' p1 E
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
' t- u$ e0 u: ~+ Z此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
, {0 a  _  P" e# m7 D6 D面。
6 E: p7 z+ I+ U  i# `8 ^8 ?; ]& k! N# }; x, o+ n6 `) P8 _
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件 ' Q# E; w! D$ F0 V
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 : c3 x5 [: C# G
利用SOCKS5代理服务器。   o# Z$ t- o5 ^
/ w% i, i' J9 H. e3 F
一个支持SOCKS5协议的前端,通常具有两种运行状态:
# `: Z1 D9 R+ f4 z6 L1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 . \; u6 F1 C/ \" }; }/ x" Z
的。
% l3 J) S0 E8 ~2 y) @- U; A
, J% B$ N3 b! j8 |& R2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
5 k3 Y7 @# x/ v送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 ! |  W' H7 b: |( Z( v" ]8 _1 P
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5 1 X9 ]# G7 _1 [# x9 {+ N/ Z, Z7 w
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 - f  L+ R) Z8 `$ g5 d) w
SOCKS 5和SOCKS4相比有所不同,具体流程如下: 6 g$ n% t8 c  R
三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:   \, F, S8 b5 L8 N2 p* j! a0 l
客户端向服务器询问认证方法
( z: n8 a% C- Q) t" G-----------------------------------
2 Z' @+ s0 y5 l5 ^% h7 _- @" H+ N字节 意义 值   H5 \! h9 i# t0 v/ P" @  b' E; Q
-----------------------------------
& I; z/ X8 y; T6 |* G1 版本 4或5
5 n1 \' l/ \+ y+ V9 N8 s# }- E2 方法数目
# M6 i, |' R5 D4 d$ Y. n3-257 方法 6 x2 {1 i  r+ S: ]! n$ D
-----------------------------------
6 W: J# D( T5 u%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。%
+ w3 n1 i2 O6 J6 h" x. N% S% N0 A" |' {! R  d/ q$ L' _- ]
服务器选择一种返回给客户端 6 i; ^7 U4 l& y# S1 p. t  t
----------------------------------- 1 E1 U0 m% E9 e. K. d# A* x
字节 意义 值   S( Z) X* v% t
-----------------------------------
3 V: M( t' N& x6 X' K/ H1 版本 5 & {4 q# ~( B, n0 ~" [$ {
2 选择的方法 其中一种,0xFF表示没有可接受的方法 ' V! x6 \" J4 e7 ?( y* s0 D
----------------------------------- + F& h2 ~; h4 Q. d! |1 A" f, }! i
+ p7 L6 N* c2 m& Y
连接请求
( V9 @5 r7 @1 `: m" b: c---------------------------------------------------- - ^' t0 m7 U5 [/ Z4 i
字节 意义 值
' v5 X2 u0 e* Z9 H2 k" o$ J----------------------------------------------------
* J7 x& ^5 w) _  m3 D1 版本 0
/ ]: y4 J9 E2 `* {( ~2 命令 1 & K; f1 U) J3 M) T+ C
3 保留 0 6 g8 F' Y% L: d' E7 h9 w
4 地址类型 1=IPv4,3=DNS,4=IPng
" u* Y0 J5 P! V4 J: A7 p5+ IP地址或DNS名  可变 1 z* Z! |: P  ]: N/ K7 ]2 |1 l
最后2个字节 TCP/UDP端口号    可变 ' v4 t: U; I% |9 d2 N' _/ d
----------------------------------------------------
, ^: _) ?, A, p# W/ _: x& U% i/ L5 E( K2 I& o+ K
连接响应
: d3 @; q: c! O' U& X---------------------------------------------------- 8 P! L9 o* @$ F( i
字节 意义 值
1 W5 j3 t/ t4 |: G---------------------------------------------------- . L& k6 n, ?  D4 q( P/ x1 U( Z3 j) d
1 版本 0 ' m: R. A; d1 ^1 W& v6 J
2 响应 00-08 8 d% T; {! G9 M9 i* ?
3 保留 0
7 l* W' a: g/ ^( ^4 地址类型 1=IPv4,3=DNS,4=IPng : \4 k. S& z1 ]* m
5+ IP地址或DNS名   可变 6 \) }! r1 x- g
最后2个字节 TCP/UDP端口号   可变
$ V- u& @( X7 i6 p; J9 x& G$ J---------------------------------------------------- : M9 x& u( ~, ~: R: w- p
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
: q2 {/ @1 k/ W* O9 O( `( s9 Y3 ~9 v9 \: P
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构: / n- c# ^8 R1 ?) v" K& c
----------------------------------------------------
# h+ {5 P* u8 Q! Z. z字节 意义 值 4 p% C% R; \1 `1 M0 A
----------------------------------------------------
/ R( Z2 m" s* |, I" i; Y$ E1-2 保留 0x0000
8 h, u( [) J1 n# j( U9 s3 分段数目 可变,0表示不分段
6 s. f$ y& D( R7 E1 U2 |% ]4 地址类型 1=IPv4,3=DNS,4=IPng
& {  h9 j, E; j! z5+ IP地址或DNS名  可变
; a; h$ K. x% T) i. \4 P) e2 L最后2个字节 TCP/UDP端口号  可变
8 p. N5 m1 I; e/ L$ B4 V数据 用户数据 由客户端应用程序决定 : V( {/ D( ~# P) u  P! p
----------------------------------------------------
( N3 W% q6 A7 |: B. q& }* m) Y, s0 |/ ]7 M& Y
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-18 12:24 , Processed in 0.019785 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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