分节阅读 8(1 / 1)

reserved

o atyp address type of following address

o ip v4 address: x'01'

o domainname: x'03'

o ip v6 address: x'04'

o dst.addr desired destination address

o dst.port desired destination port in network octet order

5.地址

在地址域(dst.addr,bnd.addr)中,atyp域详细说明了包含在该域内部的地址类型

o x'01'

该地址是ipv4地址,长4个八位组。

o x'03'

该地址包含一个完全的域名。第一个八位组包含了后面名称的八位组的数目,没

有中止的空八位组。

o x'04'

该地址是ipv6地址,长16个八位组。

6.回应

到socks服务器的连接一经建立,客户机即发送socks请求信息,并且完成认证商

议。服务器评估请求,返回一个回应如下表所示:

+----+-----+-------+------+----------+----------+

|ver | rep | rsv | atyp | bnd.addr | bnd.port |

+----+-----+-------+------+----------+----------+

| 1 | 1 | x'00' | 1 | variable | 2 |

+----+-----+-------+------+----------+----------+

其中:

o ver protocol version: x'05'

o rep reply field:

o x'00' succeeded

o x'01' general socks server failure

o x'02' connection not allowed by ruleset

o x'03' network unreachable

o x'04' host unreachable

o x'05' connection refused

o x'06' ttl expired

o x'07' command not supported

o x'08' address type not supported

o x'09' to x'ff' unassigned

o rsv reserved

o atyp address type of following address

o ip v4 address: x'01'

o domainname: x'03'

o ip v6 address: x'04'

o bnd.addr server bound address

o bnd.port server bound port in network octet order

标志reserved(rsv)的地方必须设置为x'00'。

如果被选中的方法包括有认证目的封装,完整性和/或机密性的检查,则回应就被

封装在方法选择的封装套中。

connect

在connect的回应中,bnd.port包括了服务器分配的连接到目标主机的端口号,同

时bnd.addr包含了关联的ip地址。此处所提供的bnd.addr通常情况不同于客户机连接

到socks服务器所用的ip地址,因为这些服务器提供的经常都是多址的(muti-homed)。

都期望socks主机能使用dst.addr和dst.port,连接请求评估中的客户端源地址和端口

bind

bind请求被用在那些需要客户机接受到服务器连接的协议中。ftp就是一个众所周

知的例子,它通过使用命令和状态报告建立最基本的客户机-服务器连接,按照需要使

用服务器-客户端连接来传输数据。(例如:ls,get,put)

都期望在使用应用协议的客户端在使用connect建立首次连接之后仅仅使用bind请求建

立第二次连接。都期望socks主机在评估bind请求时能够使用dst.addr和dst.port。

有两次应答都是在bind操作期间从socks服务器发送到客户端的。第一次是发送在

服务器创建和绑定一个新的socket之后。bind.port域包含了socks主机分配和侦听一

个接入连接的端口号。bnd.addr域包含了关联的ip地址。 客户端具有代表性的是

使用这些信息来通报应用程序连接到指定地址的服务器。第二次应答只是发生在预期

的接入连接成功或者失败之后。在第二次应答中,bnd.port和bnd.addr域包含了欲连

接主机的地址和端口号。

udp associate(连接?)

udp 连接请求用来建立一个在udp延迟过程中操作udp数据报的连接。dst.addr和

dst.port域包含了客户机期望在这个连接上用来发送udp数据报的地址和端口。服务器

可以利用该信息来限制至这个连接的访问。如果客户端在udp连接时不持有信息,则客

户端必须使用一个全零的端口号和地址。

当一个含有udp连接请求到达的tcp连接中断时,udp连接中断。

在udp连接请求的回应中,bnd.port和bnd.addr域指明了客户端需要被发送udp请

求消息的端口号/地址。

回应过程

当一个回应(rep值非x'00')指明失败时,socks主机必须在发送后马上中断该tcp

连接。该过程时间必须为在侦测到引起失败的原因后不超过10秒。

如果回应代码(rep值为x'00')时,则标志成功,请求或是bind或是connect,客户

机现在就可以传送数据了。如果所选择的认证方法支持完整性、认证机制和/或机密性

的封装,则数据被方法选择封装包来进行封装。类似,当数据从客户机到达socks主机

时,主机必须使用恰当的认证方法来封装数据。

7.基于udp客户机的程序

一个基于udp的客户端必须使用在bnd.port中指出的udp端口来发送数据报到udp延

迟服务器,而该过程是作为对udp连接请求的回应而进行的。如果所选择的认证方法提

供认证机制、完整性、和/或机密性,则数据报必须使用恰当的封装套给予封装。每一

个udp数据报携带一个udp请求的报头(header):

+----+------+------+----------+----------+----------+

|rsv | frag | atyp | dst.addr | dst.port | data |

+----+------+------+----------+----------+----------+

| 2 | 1 | 1 | variable | 2 | variable |

+----+------+------+----------+----------+----------+

udp请求报头是:

o rsv reserved x'0000'

o frag current fragment number

o atyp address type of following addresses:

o ip v4 address: x'01'

o domainname: x'03'

o ip v6 address: x'04'

o dst.addr desired destination address

o dst.port desired destination port

o data user data

当一个udp延迟服务器决定延迟一个udp数据报时,它会按兵不动,对客户机无任

何通报。类似的,它会将它不能或不打算延迟的数据报drop?掉。当一个udp延迟服务

器接收到一个来自远程主机的延迟数据报,它必须使用上面的udp请求报头来封装该数

据报,和任何认证方法选择的封装。

一个udp延迟服务器必须从socks服务器获得所期望的客户机的ip地址,而该客户

机要发送数据报到bnd.port--在至udp连接的回应中已经给出。udp延迟服务器还必须

drop掉除了特定连接中的一条记录之外的其它的所有源ip地址。

frag域指出了数据报是否为大量的数据片(flagments)中的一片。如果标明了,高

序(high-order)位说明是序列的结束段,而值为x'00'则说明该数据报是独立的。值介

于1-127之间片断位于数据片序列中间。每一个接收端都有一个和这些数据片相关的重

组队列表(reassembly queue)和一个重组时间表(reassembly timer)。重组队列必须

被再次初始化并且相关联的数据片必须被丢掉,而无论该重组时间表是否过期,或者

一个新的携带frag域的数据报到达,并且frag域的值要小于正在进行的数据片序列中

的frag域的最大值。且重组时间表必须不少于5秒。无论如何最好避免应用程序直接与

数据片接触(?)。

数据片的执行是可选的,一个不支持数据片的执行必须drop掉任何除了frag域值

为x'00'了数据报。

一个利用socks的udp程序接口必须预设有效的缓冲区来装载数据报,并且系统提

供的实际缓冲区的空间要比数据报大:

o if atyp is x'01' - 10+method_dependent octets smaller

o if atyp is x'03' - 262+method_dependent octets smaller

o if atyp is x'04' - 20+method_dependent octets smaller

8.安全考虑

该文档描述了一个应用层的用于穿越ip网络防火墙的协议。这种穿越的安全性是

高度依赖于正规的认证和正规执行方法提供的有效封装,以及在socks客户端和socks

服务端所选择的安全性,还有管理员对认证方法选项所作的小心周密的考虑。

9.参考文献

[1] koblas, d., "socks", proceedings: 1992 usenix security symposium.

(注:该文档实际为rfc1928的中文翻译,如有不当处,以原文为准)

资料来源:清风小木虫专业代理论坛

http://emuch.net/bbs/viewthread.php?tid=2220

------------------------------------------------------