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
------------------------------------------------------