以下是一个PAC文件,一个基本的白名单,可以通过添加域名扩展,我不是很懂Javascript,就一些代码的意思做了google,只是理解了其中一部分比如: if (/^\d+\.\d+\.\d+\.\d+$/g.test(host)) return 'DIRECT';
用到了正则表达式,如果碰到纯ip的请求,就直连。
但是从 var vhost = host.toLowerCase();
这一行开始我就懵了,有没有熟悉的能用白话文解释一下吗?多谢。
function FindProxyForURL(url, host) {
var PROXY = 'SOCKS5 127.0.0.1:9999;SOCKS 127.0.0.1:9999';
if (isPlainHostName(host)) return 'DIRECT';
if (/^\d+\.\d+\.\d+\.\d+$/g.test(host)) return 'DIRECT';
var rules = [
[
'cn',
'lan',
'local',
'xn--fiqs8s'
], [
'sinaapp.com',
'qunar.com',
'yihaodian.com',
], [
'baixing.com',
'xiami.com',
], [
'mydrivers.com',
'alisoft.com',
'51jobcdn.com'
], [
'zhi.hu',
]
];
var vhost = host.toLowerCase();
var rules_len = rules.length;
for (var j = 0; j < rules_len; j++) {
var rule_list = rules[j];
var rule_list_len = rule_list.length;
for (var i = 0; i < rule_list_len; i++) {
var rule_entry = rule_list[i];
var rule_dot = '.' + rule_entry;
if (vhost === rule_entry || vhost.indexOf(rule_dot, vhost.length - rule_dot.length) !== -1) {
return 'DIRECT';
}
}
}
return PROXY;
}
1
jugelizi 2015-07-25 00:06:20 +08:00
先小写啊,然后两次循环那个二维数组,如果域名和数组里的值相等或者能匹配到就直接连啊
|
2
cattyhouse OP @jugelizi 那个rules 可以写成这样吗?
``` javascript var rules = [ 'cn', 'lan', 'local', 'xn--fiqs8s' 'sinaapp.com', 'qunar.com', 'yihaodian.com', 'baixing.com', 'xiami.com', 'mydrivers.com', 'alisoft.com', '51jobcdn.com' 'zhi.hu', ]; ``` |
3
cattyhouse OP @jugelizi 回复不能用mardown?
var rules = [ 'cn', 'lan', 'local', 'xn--fiqs8s' 'sinaapp.com', 'qunar.com', 'yihaodian.com', 'baixing.com', 'xiami.com', 'mydrivers.com', 'alisoft.com', '51jobcdn.com' 'zhi.hu', ]; |
4
cattyhouse OP @jugelizi 为什么要两次循环呢?什么叫做二维数组?
|
5
luoway 2015-07-25 00:34:54 +08:00 via Android
@cattyhouse 可以,不过相应的循环要改
|
6
luoway 2015-07-25 00:35:35 +08:00 via Android
@cattyhouse 这是算法问题,建议从C语言学起…
|
7
cattyhouse OP @luoway 我不懂任何语言。。。哦,不对,懂一点shell。 您觉得这个pac有没有可以改进的地方以提高性能?
|
8
chhx 2015-07-25 00:57:25 +08:00
@cattyhouse 参考 https://github.com/clowwindy/gfwlist2pac 例子有两种写法。fast 应该和你需要的类似
|
9
cattyhouse OP @chhx gfwlist2pac 是黑名单模式,不知道怎么改成白名单。
|
10
linhua 2015-07-25 01:07:16 +08:00 1
|
11
bramblex 2015-07-25 09:48:07 +08:00
//================= Config Start ======================
// proxy config var rules = []; var direct = 'DIRECT'; var defalut = direct; // SSLEdge Proxy rules.push({ proxy: 'PROXY 127.0.0.1:8119', list: [ 'google.com', 'google.co.jp', 'gmail.com', 'gstatic.com', 'googleusercontent.com', 'googleapis.com', 'goo.gl', 'googlecode.com', //youtube 'youtube.com', 'ytimg.com', 'ggpht.com', 'facebook.com', 'facebook.net', 'akamaihd.net', //wikipedia.org 'wikipedia.org', // porn 'redtube.com', // onedrive 'live.com', 'dropbox.com', 'sourceforge.net', // github 'github.com', // disqus 'disqus.com', // wordpress 'w.org', 'twitter.com', 'twimg.com', ] }); //================= Config End ====================== // cache white list into a hash var _rules = {}; rules.forEach(function(rule){ var list = rule.list; var length = list.length; var proxy = rule.proxy; for (var i = 0; i < length; i++){ _rules[list[i]] = proxy; } }); // get the root domain from a url var reg = /https?:\/\/[^\/]*?(\w+\.\w+)\/.*/i; var getRootDomain = function getRootDomain(url){ return url.match(reg)[1]; }; // interface for PAC var FindProxyForURL = function FindProxyForURL(url, host) { return _rules[getRootDomain(url)] || defalut; }; 我手写的 |
12
bramblex 2015-07-25 09:51:19 +08:00
浏览器打开了以后pac只跑一遍的。所以第一次跑的效率无所谓,FindProxyForURL接口的效率才比较重要。
|
13
cattyhouse OP @bramblex 你这个也是黑名单吧。。。我想做白名单,因为现在被x的网站每天都在增长。
|
14
bramblex 2015-07-25 10:51:10 +08:00
|
15
bramblex 2015-07-25 10:54:27 +08:00
@cattyhouse
// proxy config var rules = []; var direct = 'DIRECT'; // => 这里把defalut改成代理 var defalut = 'PROXY 127.0.0.1:8119'; // SSLEdge Proxy rules.push({ // => 这里把配置改成direct proxy: direct, list: [ 'google.com', ....... |