Software 版 (精华区)

发信人: JJason (蜗牛角上争何事?石火光中寄此身), 信区: Software
标  题: ProxyExpert8免费代理软件的终结者
发信站: 哈工大紫丁香 (Sun Jan  7 09:42:29 2007), 转信

ProxyExpert8免费代理软件的终结者
bbinn@newsmth
2007.1.7
摘要:

总结目前所有的免费代理软件,就代理验证而言,对速度和稳定性的评价都不够全面、就代理调度功能而言目前所有的软件都太简陋,都无法实现以下三个功能:对 HTTP1.1的完善支持、依靠累计的代理性能评估来动态调度、在发现当前代理不可使用的时候自动切换到新的代理。全新的ProxyExpert8现在能够比较完善地达到了这三个要求,能够把免费代理阵列的稳定性增强到极致。
正文:

在ProxyExpert8.5.1被编译出来的时候我很高兴地在这里宣布免费代理软件的终结。

免费代理软件从功能上分为两类,一类是代理验证软件另一类是代理调度软件,总结一下流传广泛的此类软件曾经流传广泛的此类软件主要有以下几个:ProxyHunter、MultyProxy、ProxyExpert、ProxyFox、ProxyThron等。

从技术上讲,写一个代理验证软件很容易,最简单的使用WininetApi,把MSDN里面的例子拷贝出来再加上多线程、主要部分不超过50行,水平一般的VC程序员在20分钟之内就可以搞定。稍微复杂一点的,使用socket来发送native的http 数据包来GET一个URL,也能在100行以内,30分钟搞定。当然也有人自然地想到用wget或者curl来搞,不过由于WininetAPI在多线程性能上表现得很出色,此方面wget或 curl在此方面比较欠缺,想必之下就不如WininetApi了。这就是为什么曾经http proxy代理验证软件蜂拥而出,谁能广泛流传就看哪个作者能够坚持了。

代理调度软件远非发送一个字符串和接收一个字符串这样简单,它需要根据http协议解析client和webserver之间的数据,然后再根据代理协议的约定组合成包含新的语义的数据包来完成中转。另外还需要做一些判断,例如什么时候直接连什么时候重定向给其他某个代理,什么时候重试等。因此写一个代理调度软件则要复杂得多,首先要熟读http rfc,然后是线程同步、内存优化等,最后是艰苦的调试,除非是相关行业的技术人员搭车写一个,否则要费不少功夫。于是提供调度功能的软件就少得多了。

因为上述原因ProxyHunter、MultyProxy、ProxyExpert是3个少有的提供代理调度功能的软件。ProxyHunter 是不可颠覆的经典,特别是它在多线程并发搜索代理的稳定性上另人叹服。另外ProxyHunter还提供了代理调度功能,针对教育网的特点能够根据一个 ip列表选择使用或者不使用代理。ProxyHunter的这些功能是以后所有同类软件的范本。因为年代久远ProxyHunter代理调度功能局限于 http1.0协议的子集,因此在直接连接的时候会有很多http1.1的语法不支持,而且效率上也比较低。MultyProxy在代理调度上做的很不错,在协议支持方面和效率方面都比ProxyHunter略胜一点,缺点是不支持自动选择直接连接或是铜鼓哦代理,毕竟外国人不了解中国国情,而且验证代理锁定到google,因此现在验证功能还需要hacker一下才可以用。ProxyHunter、MultyProxy是两个很优秀的软件,因此流传也最广。ProxyExpert是几年前本人的拙作是一个小而全的软件,写的时候下了不少傻功夫,于是深入到了各种代理协议的边边角角,把几乎所有可能 hack的特征或组合都用代码实现了,于是发明出很多奇怪的功能,可能只有想突破某墙的hacker才需要使用,由于水平关系该软件非常不稳定。在这里再把功能总结一下:HTTP/HTTPS/CONNECT/SOCKS4/SOCKS4A/SOCKS5代理验证和调度,HTTP+SOCKS/SOCKS +SOCKS/SOCKS+HTTP 代理的级连的验证和调度,HTTP->SOCKS代理协议的转换。ProxyExpert到7.0以后就不再开发了,原因是作者对其稳定性彻底失望。不过,至此几乎所有可能需要的代理验证功能都可以被覆盖到了。而就代理调度功能而言目前所有的软件都太简陋,都无法实现以下三个功能:对 HTTP1.1的完善支持、依靠累计的代理性能评估来动态调度、在发现当前代理不可使用的时候迫使client适当增加重试来切换到新的代理。

写一个稳定高效的代理调度软件是本人很久以来都在为之努力的目标。全新的ProxyExpert8现在比较完善地达到了这三个要求。

在HTTP1.1协议支持方面,ProxyExpert8使用Privoxy内核,5.4万行的代码和若干年的技术积累可以给人很强的信心。

ProxyExpert8基于边使用边评价的算法,在使用过程中累计每个代理的积分,依靠这个积分来对代理进行排序。同时用户还可以使用javascript的自动代理脚本来干预调度的决策。当然,手动验证功能作为第一推动来给每个代理一个表现的机会来产生成最初的积分。

发现错误自动重新选择代理的功能是ProxyExpert8的一个创新。这个功能是以前所有的代理调度方式包括自动配置脚本都无法达到的。ProxyExpert8的这项功能来自对http协议的hack,下面详细讲述。

熟读http1.1 rfc以后发现有7种方法可以让client来重试,但是事实上IE对此都置之不理,仅仅有一种方式替代的方式i可以奏效,那就是Redirect.例如,IE发送http://xxx/xxx.htm, 但是当前使用的代理是错误的,于是我修改Proxy的回应为302 Fond\r\nLocation:http://xxx/xxx.htm? proxyexpertretry=n,于是IE将会重试这个URL于是我就有机会选择新的代理,目前是强迫重试5次,根据HTTP协议,多余的URL参数将被忽略,因此新URL和原URL是等价的,但是会被认为是不同的资源。相应地,针对修改后的URL,需要修正If-Modified-Since的回应。附录是一个典型的自动重试切换新代理的日志。

综上所述,ProxyExpert8融代理验证和调度为一体、理论上 完善、稳定和可靠、3大独创特点使之能够把免费代理阵列的稳定性增加到极致,甚至增加直接连接时候的网络表观稳定性。因此本人称之为免费代理软件的终结者。
附录:

一个典型的自动重试切换新代理的日志
GET: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
PROXY:1.1.1.1:80

ANSWER: HTTP/1.0 500 Service Unavailable
OVERRID:
HTTP/1.1 302 Found
Location:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html?proxyexpertretry=0


GET: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html?proxyexpertretry=0
PROXY:1.1.1.2:80
ANSWER: HTTP/1.0 500 Service Unavailable
OVERRID:
HTTP/1.1 302 Found
Location:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html?proxyexpertretry=1

。。。
GET: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html?proxyexpertretry=5
PROXY:1.1.1.5:80
ANSWER: HTTP/1.0 500 Service Unavailable
OVERRID:
HTTP/1.1 302 Found
Location:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html?proxyexpertretry=5
第5次重试不再更新URL,因为URL相同IE放弃重试.

作者: bbinn@newsmth
链接: http://hi.baidu.com/proxyexpert/blog/item/7315d109f01c1082d0581b74.html
除注明外本站文章均为原创,转载请注明: 转载自总统博客 [http://jiangzhanyong.com]
本文链接: http://jiangzhanyong.com/2007/01/about-proxyexpert-8x-162.html

--
从前有个ZIP
              ZIP里有个RAR
                             RAR里面有个ISO
                                              有一天你把ISO虚拟成光驱一看
里面有个ZIP
            ..........


※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 172.16.4.63]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.106毫秒