避免使用——
return “SOCKS 127.0.0.1:8001; DIRECT”;
这个设定看起来很美,SOCKS挂了的话选择DIRECT模式继续。然而实际情况是怎样?若存在多个选项(例子是SOCKS和DIRECT),对SOCKS是否响应的测试,WinINET库只会做一次(若有Load Balancing功能,对代理的选择应是RR)。也就是说,一旦前面的SOCKS端口关闭,所有请求均使用DIRECT模式。即便再启动端口,请求也不会走SOCKS(直到程序重启)。除非你能保证SOCKS 100%响应,否则别加入DIRECT为后备选项(单独return可以)。
另外,Google Chrome对File://协议的支持依旧是浮云,如果你使用本地PAC文件(Chrome使用IE的设置),会出现在IE中没问题,Chrome却不读取PAC的状况。Opera 10读取本地PAC文件亦有问题,至少我没成功过。
最后,WinINET不支持SOCKSv5,这代表着它不支持UDP层查询DNS的功能,修改HOSTS表或把Lookup请求用软件Forward到SOCKS端口上才可实现远程DNS查询。更诡异的是,Chromium的人知道WinINET的弱点之后,自己开发了一个独立的HTTP stack,支持SOCKSv5,却没有实现UDP层,于是也不支持DNS查询。前后不是人。
如果你真的很在意SOCKS,延展性极强的Firefox依旧是你最好的选择。以上。
更新:Chrome需要用Flag来设置,Lookup如前文所述,依旧提交至本地设置的DNS(IE默认),而非远程。h/t to est.
chrome.exe -proxy-pac-url=file:///E:/gfw_kiss_my_ass.pac
Opera是不支持SOCKS,HTTP代理+本地PAC使用正常。
赞Internet is a waste of time, and that’s exactly what’s right about it.顺便板凳也抢了。
抢板凳失败鸟。囧
同为Opera 10.10 本地PAC, SOCKS不支持。
你们的PAC地址怎么写?反正这边不行。
我是file:///home/wjzhou/work/proxy.pac。
似乎有时候改了文件要重启ff才行。
而且,对于twitter来说,要同时在hosts里指定twitter ip才行,不知道为什么。
function FindProxyForURL(url, host) {
url = url.toLowerCase(); // Twitter必需
if (
/////////////////////////////////////////////////
shExpMatch(url, ‘*twitter.com*’) ||
shExpMatch(url, ‘*twimg.com*’) ||
shExpMatch(url, ‘*youtube.com*’) ||
shExpMatch(url, ‘*ytimg.com*’) ||
shExpMatch(url, ‘*wordpress.com*’) ||
shExpMatch(url, ‘*facebook.com*’) ||
shExpMatch(url, ‘*blogspot.com*’) ||
/////////////////////////////////////////////////
false) { return ‘SOCKS 127.0.0.1:7777’; }
return ‘DIRECT’;
}
DNS Lookup的问题,墙对推特的劫持比较全面。
不想改Hosts的话,只能想办法把这些DNS查询转发到SOCKS上。
完全支持SOCKSv5的浏览器可以用UDP层绕过。
autoproxy在未来有希望变成一个整合性平台,做到专门化privoxy的程度,路由优化、DNS本地缓存、代理平衡一并解决了。
function FindProxyForURL(url, host) {
var DIRECT = 0, AD_FILTER = 1, TOR = 2, TOR_SOCKS = 3,
GFW = TOR,
proxy = [
‘DIRECT’, // 0 DIRECT
‘PROXY 0.0.0.0:80’, // 1 AD_FILTER
‘PROXY 127.0.0.1:8118’, // 2 TOR
‘SOCKS 127.0.0.1:9050’ // 3 TOR_SOCKS
],
hosts = {
‘127.0.0.1’ : DIRECT,
‘localhost’ : DIRECT,
‘blogspot.com’ : GFW,
‘tumblr.com’ : GFW,
‘twitter.com’ : GFW,
‘getchu.com’ : GFW,
‘gstatic.com’ : GFW,
// and so on…
‘images.google.com’ : GFW,
‘mail-archive.com’ : GFW,
‘wikileaks.org’ : GFW,
‘my.opera.com’ : GFW,
‘youtube.com’ : GFW
},
urls = {
},
subnets = [],
i, ilen, j, jlen, ret;
ret = proxy[DIRECT];
if( isPlainHostName(host) ) {
return ret;
}
url = url.toLowerCase();
host = host.toLowerCase();
for(i in hosts) {
if( dnsDomainIs(host, i) ) {
ret = proxy[hosts[i]];
break;
}
}
return ret;
};
// 一旦脚本语法有误,即使纠正也必须重启Opera。
PAC没问题,问题在于输入的本地位置。
file://..
file:///..
file://localhost/..
全部不行。
PS:你的for-loop会比较慢的样子。
位置:D:\others\proxy.pac 没有file:\/+
…for loop感觉不出来就算了,我网速慢多了…
居然还是不行= = 我家Opera 10到底怎么了。
作为一名编程菜鸟,面对防火墙俺感到压力很大…
看到大堆的代码就头疼