1.介绍: 【程序编程相关:使用C++ Builder开发Direc】
笔者在实际学习中,由于在有些软件用到了socks5(如oicq,icq等),对其原理不甚了解,相信很多朋友对其也不是很了解,于是仔细研读了一下rfc1928,觉得有必要译出来供大家参考. 【推荐阅读:用Pcomm Pro开发串行通信程序】
2.现状: 【扩展信息:C++ Builder的几则小应用】
防火墙的使用,有效的隔离了机构的内部网络与外部网络,这种类型的internet架构变得越来越流行.这些防火墙系统大都充当着网络之间的应用层网关的角色,通常提供经过控制的telnet,ftp,与smtp访问.为了推动全球信息的交流,更多的新的应用层协议的推出.这就有必要提供一个总的架构使这些协议能够更明显与更安全的穿过防火墙.也就有必要在实际上为它们穿过防火墙提供一个更强的认证机制.这种需要源于客户机-服务器联系在不同组织网络之间的实现,而这种联系需要被控制与是很大程度上被认证的. 该协议被描述为用来提供在tcp与udp域下为客户机-服务器应用程序便利与安全的穿过防火墙的一个架构.该协议在概念上被描述为一个介于应用层与传输层之间的"隔离层",但是这类服务并不提供网络层网关服务,如icmp报文的传输.
socks4为基于tcp的客户机-服务器应用程序提供了一种不安全的穿越防火墙的机制,包括telnet,ftp与当前最流行的信息发现协议如http,wais与gopher. 新协议为了包括udp扩展了socks4,为了包括对总体上更强的认证机制的支持扩展了协议架构,为了包括域名与ipv6地址的支持扩展了地址集. socks协议执行最具代表性的是包括了在socks库中利用适当的封装程序来对基于tcp的客户程序进行重编译与重链结.
注意: 除非特别提及,封装在包格式中的十进制数表示的是通讯域的长度(用八位组octect表示).一个给定的八位组必须具有指定的值,格式xhh被用来表示在该域中单个八位组的值.当单词"变量variable"被使用时,它指出了通讯域拥有一个可变长度,这个可变长度要么由一个联合的(一个或两个八位组)长度域定义,要么由一个数据类型域所定义.
3.基于tcp客户机的程序
当一台基于tcp的客户机希望与目标主机建立连接时,而这台目标主机只有经过防火墙才能到达(这种情况?一直持续到?它被执行时),它就必须在socks服务器端的适当的socks端口打开一个tcp连结.socks服务按常例来说定位于tcp端口1080.如果连接请求成功,客户机为即将使用的认证方式进行一种协商,对所选的方式进行认证,然后发送一个转发请求.socks服务器对该请求进行评估,并且决定是否建立所请求转发的连接. 客户机连接到服务器,发送一个版本标识/方法选择报文:
+----+----------+----------+ |ver | nmethods | methods | +----+----------+----------+ | 1 | 1 | 1 to 255 | +----+----------+----------+
ver(版本)在这个协议版本中被设置为x05.nmethods(方法选择)中包含在methods(方法)中出现的方法标识八位组的数目. 服务器从methods给出的方法中选出一种,发送一个method selection(方法选择)报文:
+----+--------+ |ver | method | +----+--------+ | 1 | 1 | +----+--------+
... 下一页