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

[收藏]socks 5 协议 介绍

[复制链接]
发表于 2005-2-27 13:36:07 | 显示全部楼层 |阅读模式
  如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
/ N" z* t$ D& y# n上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
; E$ [% L; }/ h$ ~7 O9 x. e通常不必关心 SOCKS5 协议。 ' l2 R8 E% Q* q( J! @& O* d( j

9 {5 Y8 @/ f2 f# l, A- zSOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
  h! Z6 V" f/ ~9 X  _, A$ ]7 R: h外部 Internet 的机器访问外部时,有用。   E9 P) _. k, y( e$ d/ e2 m

6 Y1 d- G, a' g( `% TSOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器 $ e+ l3 t# M1 Z% B# j- D
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet 4 R% I5 U$ ]8 w! g8 I  ^: V
网中的服务器,或者使通讯更加安全。 1 b; R, y5 ~* h& y% I8 Z5 G1 `$ W

% _/ r! ~  M9 p3 T/ ~: Y+ CSOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了 # H4 U6 u6 K' k5 Y( q) k; S
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯, : F! j5 r- v7 u( s. Y2 U# r& j
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
" Z% f& S; e8 w7 e1 F7 s. p器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
; q/ J7 U$ W8 M4 x- M+ d+ q的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
. l) M' y2 N* ?& w+ o2 V器的响应后,也原样转发给前端。
# P, a- `  b- v; G: O5 d9 t; L5 I# o! S0 k2 H/ P1 L
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
" `# n: Q8 T3 }7 n都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但 3 R# {# B9 X3 r- w- r
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
( A8 [) {5 ^+ _- s5 I
( E4 C4 \% P% r/ G; M3 v: t与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
" G9 @) A6 C1 H5 ~件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转 ) a  b( Q  \% F* ?! S( L) I& c2 p8 n
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
; j4 [( A  m$ @
8 A8 u* U, M$ g我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
! U& k1 b( p, r# i办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因 & A/ p7 V/ C* P4 r& l0 ]$ F& d
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
7 k% o4 {$ g- X' [# Q, D8 S$ z面。
8 e+ P% b8 A1 h( e+ F, W
, V3 Q1 G2 L3 a3 s不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
0 H2 Q+ ~9 y( x/ M8 O7 [6 H地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能 ) B% O6 r$ |2 l& x8 }0 f# S2 ]# G8 g
利用SOCKS5代理服务器。
+ c- f8 }0 _8 d2 v) H0 o- |0 y6 u4 X- `; B9 n& y+ c
一个支持SOCKS5协议的前端,通常具有两种运行状态: % U0 `+ n2 t5 {0 t) F
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行 2 E# ?5 }8 n- [- q0 y' h( N8 `& j
的。 ! o* \2 I0 G% X/ {6 e, i+ x
+ B# x8 ]) s, R5 n
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
3 o0 p& T* G2 x' C5 V送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端 3 e% Y  o* X" N* V8 ^; |! ?  Y
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
1 u0 W& n6 t8 A4 r" O4 R服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
 楼主| 发表于 2005-2-27 13:36:18 | 显示全部楼层
SOCKS 5 # O! ~  G9 a" P! O, m5 Z
SOCKS 5和SOCKS4相比有所不同,具体流程如下:
5 |+ s; J. \: p0 A" W三步握手建立TCP连接====》客户端向服务器询问认证方法====》服务器选择一种返回给客户端====》连接请求====》连接响应。包结构如下:
. E2 U- c) \$ p& J客户端向服务器询问认证方法 / u) J9 z& l, v- G. Y- Q0 t& D$ j9 v
-----------------------------------
. s% j; W/ C  G. ~5 [2 v& Z% [; q字节 意义 值
$ G) B% @  Y! o- }----------------------------------- * Y: c) X! S" n+ a, F
1 版本 4或5
1 Q, y3 p6 i1 ^* h1 z* p; U: b2 方法数目
3 m* B+ J, E/ k; K' ~1 t7 Q* `3-257 方法
$ P+ p  t! w, z5 z----------------------------------- 1 V9 X% [  Q: ]" [9 z9 T: u4 [
%方法值说明:00,无需认证;01,GSSAPI;02,需要用户名和PASSWORD;03-7F。IANA赋予的数字;80-FE,保留空间;FF,没有可接受的方法。% , d# \+ p# [! [4 c$ ?

$ Z* |& ]# ^: B9 n( r服务器选择一种返回给客户端 ! Y7 d( \; j* ?, H2 L  I
----------------------------------- 3 l6 s/ c. Y% H
字节 意义 值 4 l$ N- z$ D4 f
----------------------------------- 1 T/ I0 E  \$ E* i/ G$ H' |
1 版本 5
( f% h) r+ e' _# N! w$ U2 选择的方法 其中一种,0xFF表示没有可接受的方法
; v/ i( U) @( ~8 s- ?+ b# y6 f----------------------------------- 1 U& c2 d* ~; f$ r$ A" ]6 }3 w) _
8 g" M; U- q- W8 H
连接请求
/ S6 q2 @' K9 h+ {/ b---------------------------------------------------- & v/ J% s, E7 t4 N- Z1 x% L% O
字节 意义 值 6 I0 w$ c: s" S
---------------------------------------------------- - F: y. t: k# |! [" t- z+ k3 h3 H
1 版本 0
2 h1 \2 ?. c& ]2 命令 1 ! O6 l& y- N# q0 c0 {
3 保留 0 , t* B' @( [2 J, Q$ n5 G
4 地址类型 1=IPv4,3=DNS,4=IPng & I( X( k/ q/ P  k% ~3 u5 M
5+ IP地址或DNS名  可变
+ R) X+ `  G- M. `& p* A: J4 d最后2个字节 TCP/UDP端口号    可变
3 o2 T* w( j* n---------------------------------------------------- 7 C/ a) G# }0 w; B

0 M3 `$ t2 c/ u& n连接响应
3 i5 h5 N4 n0 K6 j5 w& G----------------------------------------------------
2 ^1 \# I, f, S4 w; N字节 意义 值
6 M& i- R( E, X0 J' a6 I---------------------------------------------------- ; X; k4 k1 g3 z: x' X8 X1 O1 @
1 版本 0 # {+ N9 Q0 E' o0 U, W" k$ D
2 响应 00-08
, Q, e3 M8 v$ _3 保留 0 ; L4 X, P; \) |
4 地址类型 1=IPv4,3=DNS,4=IPng
- e6 K' S9 R# u) A/ m/ r9 k: C! f5+ IP地址或DNS名   可变
: @* {- f$ {! k  Q) h最后2个字节 TCP/UDP端口号   可变 / C$ R. r4 [* Y# T
---------------------------------------------------- 6 W! y# H: c' N. r; j3 v
响应值说明:00,成功;01,SOCKS服务器故障;02,规则不允许连接;03,网络不可访问;04,主机不可访问;05,拒绝连接;06,TTL过期;07,不支持命令;08,不支持地址类型。%
' [' |* x% Y2 G% z! j# i( z( ^0 d  Q! j6 Z7 M8 X& f/ F6 C+ R
SOCKS 5 支持创建UDP代理,但是其原理我也不清楚,请高手补充。下面提供UDP请求包的结构:
# H, U. ^+ G  q9 B---------------------------------------------------- - k/ E+ I6 C% N
字节 意义 值
4 {+ q3 G9 V5 c4 a% Y' o; P) h- S---------------------------------------------------- 4 y$ M7 @! s" T( V
1-2 保留 0x0000 ; l" n( u5 G, D  a" k# Z
3 分段数目 可变,0表示不分段
- W- N6 k; {9 [' P' p4 地址类型 1=IPv4,3=DNS,4=IPng 8 I! H9 e; F2 C  j  A/ l
5+ IP地址或DNS名  可变
& W& y" ]0 Q# R* T最后2个字节 TCP/UDP端口号  可变 3 o* R9 J# `1 B/ t% Q! [5 `
数据 用户数据 由客户端应用程序决定
2 f+ I: Y9 f1 O: S/ Q' p+ v----------------------------------------------------
  x. R/ b4 U* F( ^" f% Z7 I1 ~# t9 E" v, M1 ~
SOCK 5 有RFC1928定义,有兴趣的可以看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 22:07 , Processed in 0.018904 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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