shadowsocks:通过ip判断来动态代理

2015-11-27 · 7 min read

在公司办公用两台笔记本,一台“标机”可以访问各种内网环境和内部邮箱,一台 mac“非标机”主要用来开发,但是还是有大量网站被禁止访问了,例如印象笔记,网盘,各种免费邮箱。这当然不能忍,严重影响“工作效率”,刚好部署了 shadowsocks来科学上网,就直接把所有被禁的站点加入 PAC 里,但是常常又会在家里用 mac,通过 shadowscoks 访问国内网站实在是慢,前几天的时候频繁的修改 PAC 文件,google 各种自动修改 PAC 的方法,始终没有找到好的方法,本身对“网络”也不太熟悉,所以这种低效的方式持续了好一段时间。直到……

其实 PAC 文件里就是 js 的语法,有一个myIpAddress() 方法可以取到当前的 ip 地址,那么通过 ip 就可以判断出网络环境,是在公司还是在家,从而动态修改代理设置。好了直接上代码:

var domainsForWork = {
    "yinxiang.com": 1,
    "evernote.com": 1,
    "baidu.com": 1,
    "bdstatic.com": 1,
    "qbox.me": 1,
    "qiniu.com": 1,
    "zhihu.com": 1
};

var domains = {
    "google.com": 1
    ...
};

var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";

var direct = 'DIRECT;';

function FindProxyForURL(url, host) {

    // 如果是公司的ip,就吧domainsForWork的域名加入domains
    if(myIpAddress().indexOf('172.18') !== -1) {
        for(var item in domainsForWork) {
            domains[item] = domainsForWork[item];
        }
    }

    var lastPos;
    do {
        if (domains.hasOwnProperty(host)) {
            return proxy;
        }
        lastPos = host.indexOf('.') + 1;
        host = host.slice(lastPos);
    } while (lastPos >= 1);
    return direct;
}