突破双重(多重?!)SOCKS代理服务器的封锁传递…

2008-04-09 04:26:30来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

现在P2P技术中讨论的最热门的话题,我想怕是如何在不通过中转服务器的情况下,如何畅通无阻的传递文件了(当然,广泛的说法是传递信息),本人并非这方面的专家,也还没有完全找到“畅通无阻的传递文件”的灵丹妙药,这个问题的确是很棘手,因为即使现在最具有代表性的JXTA,在PEER之间传递信息也不能完全的达到这个要求,也要通过Rendezvous Peer(集合点) 或RouterPeer(路由Peer) ,GatewayPeer(网关Peer)等来协助中转--当然,JXTA秉承了JINI的先进思想和特性,在现在的网络环境下,我想这应该是最理想不过的P2P设计(在另外一个话题中,我会比较详细和大家探讨一下)。至于MSN,QQ,ICQ等,我想是典型的集中式服务器的代表,就没多少讨论的必要了!
我这里想讨论的,是在不依靠专门的中转服务器,而在网关(或者说连到外部网络的出口)上装有SOCKS代理服务器的情况下,可以突破双重(多重?!)SOCKS代理服务器的封锁来传递信息的一点个人小技巧,因为在我在公布可以突破双重(多重?!)SOCKS代理服务器的封锁来传递信息这个观点后,许多人都表示怀疑,甚至有少数人说根本不可能,当然,更多的是希望把这个技巧说一下。对于IT技术来说,这是非常正常的一种现象,我在这里公布的目的并非是“你不信,我让你看看”,因为我DEMO已经发布出来,其实勤快一点的人只要试一下,就知道真和假了,所以我无意于为这种目的来费这么多唇舌!我只是希望在这里和大家交流一下,权做抛砖引玉,希望大家共同进步!
废话少说(不然有人抛烂西红柿了,^_^)还不明白SOCKS代理协议的人先到Http://www.china-pub.com/computers/eMook/emooknew/rfctxt/RFC1928.txt冲一下电,不明白基本TCP/IP协议的也请先了解一下,不然会听的不知所云!
突破双重SOCKS代理服务器的封锁来传递文件,简单来说,就是假设有这么一种网络情况,PeerA1(对等机A1) 在A局域网内,通过PeerA连接到互连网络上,PeerA上安装了SOCKS代理服务器, PeerB1(对等机B1) 在B局域网内,通过PeerB连接到互连网络上,PeerB上安装了SOCKS代理服务器,如下所示:

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

PeerA1 (192.168.0.3) <局域网内IP>
|
|
(192.168.0.1) <局域网网关IP>-安装了SOCKS代理服务器
PeerA
[202.15.2.199]
|
|
(internet)
|
|
[68.124.5.128]
PeerB
(192.168.0.1) <局域网网关IP>-安装了SOCKS代理服务器
|
|
PeerB1(192.168.0.3) <局域网内IP>

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

现在,假如两台机器能通过SOCKET套节字直接建立连接的话,我开发的软件已经可以传递文件了(因为PeerA禁止了所有的进出端口,就只留1080,我要访问外部资源的话,只能通过代理服务器了),并且速度还不错呢,你看你看,电影《黑客帝国3》正从PeerA1欢快的跑到PeerB呢!
可是, 我希望从PeerA1传递一个文件到PeerB1,该怎么办呢,众所周知,PeerA1和PeerB1处在不同的局域网后面,并且没有公网IP,通过SOCKET套节字直接通信(TCP/IP协议)是没办法的(或许有办法,不过我不知道,你知道吗)!
天无绝人之路,既然两个网关上都装有SOCKS代理服务器,那或许有希望,那到底怎么做,我才能达到目的呢?
噢,先来看看SOCKS代理协议吧http://www.china-pub.com/computers/eMook/emooknew/rfctxt/RFC1928.txt:
这个协议说:

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

3.基于TCP协议的客户
当一个基于TCP协议的客户端希望与一个只能通过防火墙可以到达的目标(这是由实现所决定
的)建立连接,它必须先建立一个与SOCKS服务器上SOCKS端口的TCP连接。通常这个TCP端口是
1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选
中的方式进行认证,然后发送转发的要求。SOCKS服务器检查这个要求,根据结果,或建立合适的
连接,或拒绝。
除非特别注明,所有出现在数据包格式图中的十进制数字均以字节表示相应域的长度。如果某
域需要给定一个字节的值,用X''''hh''''来表示这个字节中的值。如果某域中用到单
词''''Variable'''',这表示该域的长度是可变的,且该长度定义在一个和这个域相关联(1 – 2个
字节)的域中,或一个数据类型域中。
客户端连到服务器后,然后就发送请求来协商版本和认证方法:

VER
NMETHODS
METHODS
1
1
1 to 255
这个版本的SOCKS协议中,VER字段被设置成X''''05''''。NMETHODS字段包含了在METHODS字段中
出现的方法标示的数目(以字节为单位)。
服务器从这些给定的方法中选择一个并发送一个方法选中的消息回客户端:
VER
METHOD
1
1
如果选中的消息是X''''FF'''',这表示客户端所列出的方法列表中没有一个方法被选中,客户端
必须关闭连接。
当前定义的方法有:
? X''''00'''' 不需要认证
? X''''01'''' GSSAPI
? X''''02'''' 用户名/密码
? X''''03'''' -- X''''7F'''' 由IANA分配
? X''''80'''' -- X''''FE'''' 为私人方法所保留的
? X''''FF'''' 没有可以接受的方法
然后客户和服务器进入由选定认证方法所决定的子协商过程(sub-negotiation)。各种不同的
方法的子协商过程的描述请参考各自的备忘录。
开发者如果要为自己的方法得到一个方法号,可以联系IANA。可以参考关于已经被分配号码
的文档以得到当前所有方法的列表和相应的协议。
符合本文档的SOCKS V5实现必须支持GSSAPI,并且在将来支持用户名/密码认证方式。


4.请求
一旦子协商过程结束后,客户端就发送详细的请求信息。如果协商的方法中有以完整性检查和
/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。
SOCKS请求的格式如下:
VER
CMD
RSV
ATYP
DST.ADDR
DST.PORT
1
1
X''''00''''
1
Variable
2
其中
? VER 协议版本: X''''05''''
? CMD
? CONNECT:X''''01''''

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:DELPHI也可以实现控件数组,用定义数组变量实现控件数组

下一篇:动态创建ClientDataSet的表定义