gscan_quic
gscan_quic copied to clipboard
修改 goproxy 主程序,让 Pac 支持白名单
goproxy 的pac并不支持白名单, 当然它本身其实是黑名单模式, 如果不往里添网址, 那么就自动白名单
但是假如想要排除 gfwlist 里的网址就没办法了, 原因是下面 goproxy 自动生成的代码
无论在 proxy.pac 里怎么写, MyFindProxyForURL 都会返回 代理 或者 直连
如果返回代理就直接返回, 如果是直连那么还要在 gfwlist 里再判断一次, 所以最终结果不受 proxy.pac 控制
function FindProxyForURL(url, host) {
// 这里的 MyFindProxyForURL 其实是 proxy.pac 里的 FindProxyForURL
↓
if ((p = MyFindProxyForURL(url, host)) != "DIRECT") {
return p
}
var lastPos;
do {
if (sites.hasOwnProperty(host)) {
return 'PROXY localhost:8087';
}
lastPos = host.indexOf('.') + 1;
host = host.slice(lastPos);
} while (lastPos >= 1);
return 'DIRECT';
}
解决办法也很简单, 那就是修改 goproxy 本身, 只要找到上面的代码, 改掉就行 比如改成下面这样
// 新加的代码
for (i in whiteList) {
delete sites[whiteList[i]];
}
function FindProxyForURL(url, host) {
if ((p = MyFindProxyForURL(url, host)) != "DIRECT") {
return p
}
var lastPos;
do {
if (sites.hasOwnProperty(host)) {
return 'PROXY 127.0.1.2:8087';
}
lastPos = host.indexOf('.') + 1;
host = host.slice(lastPos);
} while (lastPos >= 1);
return 'DIRECT';
}
自己在 proxy.pac 里定义一个白名单,比如 阮一峰 的网站
var whiteList = new Array(
"ruanyifeng.com",
);
浏览器解析执行 pac 时就会提前删除 sites 里的网站, 这样就达到了删除 gfwlist 里网址的效果... 禁用 goproxy 的 pac 代理,重启 goproxy 再访问 http://www.ruanyifeng.com 就不再经过 goproxy 了
实际改法也很简单, 只要用十六进制编辑器打开 goproxy 然后搜索
66 75 6E 63 74 69 6F 6E 20 46 69 6E 64 50 72 6F 78 79 46 6F 72 55 52 4C 28 75 72 6C 2C 20 68 6F 73 74 29 20 7B 0A 20 20 20 20 69 66 20 28 28 70 20 3D 20 4D 79 46 69 6E 64 50 72 6F 78 79 46 6F 72 55 52 4C 28 75 72 6C 2C 20 68 6F 73 74 29 29 20 21 3D 20 22 44 49 52 45 43 54 22 29 20 7B 0A 20 20 20 20 20 20 20 20 72 65 74 75 72 6E 20 70 0A 20 20 20 20 7D 0A 0A 20 20 20 20 76 61 72 20 6C 61 73 74 50 6F 73 3B 0A 20 20 20 20 64 6F 20 7B 0A 20 20 20 20 20 20 20 20 69 66 20 28 73 69 74 65 73 2E 68 61 73 4F 77 6E 50 72 6F 70 65 72 74 79 28 68 6F 73 74 29 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6E 20 27 50 52 4F 58 59 20 31 32 37 2E 30 2E 31 2E 32 3A 38 30 38 37 27 3B 0A 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 6C 61 73 74 50 6F 73 20 3D 20 68 6F 73 74 2E 69 6E 64 65 78 4F 66 28 27 2E 27 29 20 2B 20 31 3B 0A 20 20 20 20 20 20 20 20 68 6F 73 74 20 3D 20 68 6F 73 74 2E 73 6C 69 63 65 28 6C 61 73 74 50 6F 73 29 3B 0A 20 20 20 20 7D 20 77 68 69 6C 65 20 28 6C 61 73 74 50 6F 73 20 3E 3D 20 31 29 3B 0A 20 20 20 20 72 65 74 75 72 6E 20 27 44 49 52 45 43 54 27 3B 0A 7D
找到后从头替换为
66 6F 72 20 28 69 20 69 6E 20 77 68 69 74 65 4C 69 73 74 29 20 7B 0D 0A 09 64 65 6C 65 74 65 20 73 69 74 65 73 5B 77 68 69 74 65 4C 69 73 74 5B 69 5D 5D 3B 0D 0A 7D 0D 0A 66 75 6E 63 74 69 6F 6E 20 46 69 6E 64 50 72 6F 78 79 46 6F 72 55 52 4C 28 75 72 6C 2C 20 68 6F 73 74 29 20 7B 0D 0A 69 66 20 28 28 70 20 3D 20 4D 79 46 69 6E 64 50 72 6F 78 79 46 6F 72 55 52 4C 28 75 72 6C 2C 20 68 6F 73 74 29 29 20 21 3D 20 22 44 49 52 45 43 54 22 29 20 7B 0D 0A 09 72 65 74 75 72 6E 20 70 0D 0A 7D 0D 0A 76 61 72 20 6C 61 73 74 50 6F 73 3B 0D 0A 64 6F 20 7B 0D 0A 09 69 66 20 28 73 69 74 65 73 2E 68 61 73 4F 77 6E 50 72 6F 70 65 72 74 79 28 68 6F 73 74 29 29 20 7B 0D 0A 09 09 72 65 74 75 72 6E 20 27 50 52 4F 58 59 20 31 32 37 2E 30 2E 31 2E 32 3A 38 30 38 37 27 3B 0D 0A 09 7D 0D 0A 09 6C 61 73 74 50 6F 73 20 3D 20 68 6F 73 74 2E 69 6E 64 65 78 4F 66 28 27 2E 27 29 20 2B 20 31 3B 0D 0A 09 68 6F 73 74 20 3D 20 68 6F 73 74 2E 73 6C 69 63 65 28 6C 61 73 74 50 6F 73 29 3B 0D 0A 7D 20 77 68 69 6C 65 20 28 6C 61 73 74 50 6F 73 20 3E 3D 20 31 29 3B 0D 0A 72 65 74 75 72 6E 20 27 44 49 52 45 43 54 27 3B 0D 0A 7D
或者自己粘上这一段也行, 但是一定不能多或者少于原来的字节
for (i in whiteList) {
delete sites[whiteList[i]];
}
function FindProxyForURL(url, host) {
if ((p = MyFindProxyForURL(url, host)) != "DIRECT") {
return p
}
var lastPos;
do {
if (sites.hasOwnProperty(host)) {
return 'PROXY 127.0.1.2:8087';
}
lastPos = host.indexOf('.') + 1;
host = host.slice(lastPos);
} while (lastPos >= 1);
return 'DIRECT';
}
最好是下载代码文件,因为 github 把tab转正空格了,这样就超出了长度 原来的长度是368,多了不行,要是少了后面可以补空格 code.zip
主任, 死狗权当活狗医~~ :)
为什么大家喜欢用 sites.hasOwnProperty(host) 呢,直接 sites [host] 判断不好吗?速度一样,写起来还方便。
不懂 js,不过要是这样写还能省不少字节呢...
主任这是打算接锅? :grinning: 这个俺都觉得大致还好,就是400、502之类的错误有时候比较多,然后就是有时候需要“重启”。
@blob2015 应该不会吧,现在基本上直连不了谷歌,即使要做也不会再用谷歌; 还有其它云服务可以选择,能直接使用套接字,通道不需要写得很复杂,伪装成普通 HTTPS 就够用了。
@SeaHOH QUIC一直用得比较愉快啊,实在不行,加个前置。毕竟g家家大业大,虽然另一面是树大招风。 大海兄打算用其他家的?好消息啊。 @MeABc 我说ABC兄啊,最近都忙啥呢。
过完年再说,这段时间过得真是……
@jasonliul J大,研究下这个页面,很多代理测试工具,而且免费用户每天只能用第一页的代理 https://proxy.mimvp.com/demo2.php#demo-item-demo 米扑代理
研究什么? 自己去试~
117.135.132.107 3000 这个大约4m/s
@SeaHOH 不急,怎么着也得喘口气啊
@blob2015 其实已经有很多这样的项目在进行,包括一些时间很长的,如 gsnova。 我只是想做一个方便自己使用的功能,就像在 GotoX 中进行的改造。
@SeaHOH 星星就是星星,即便是群星里面的星星。 大海兄造的,用起来相对比较习惯。俺这种小白,太高端了,扛不住啊。
一直没搞清楚GP的代理逻辑。。。 主任,不加这个白名单的话,想自己用pac控制代理,是不是停用 gfwlist 功能就可以了?
一直都是自己的本地pac,兼顾广告
gfwlist很多一辈子都不去的,什么轮子什么门的都是阻挡的