-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.proxy.pac
75 lines (66 loc) · 1.89 KB
/
example.proxy.pac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function FindProxyForURL(url, host) {
// url: http://www.example.com:80/aaaa
// host: www.example.com
// ※ portは含まれない
var PROXY = "PROXY proxy.intra.example.co.jp:8080";
var DIRECT = "DIRECT";
// VPN1用プロキシ
function isVPN1(host) {
// 10.1.0.0/16 がVPN1のIPレンジの場合
if (/^10\.1\.\d+\.\d+$/.test(host)) return true;
// ドメイン登録も対応
if (/^project-aaa\.vpn\.example\.co\.jp$/.test(host)) return true;
return false;
}
if (isVPN1(host)) {
return ["PROXY 127.0.0.1:18080", DIRECT].join("; ");
}
// VPN2用プロキシ
function isVPN2(host) {
// 10.2.0.0/16 がVPN2のIPレンジの場合
if (/^10\.2\.\d+\.\d+$/.test(host)) return true;
// ドメイン登録も対応
if (/^project-bbb\.vpn\.example\.co\.jp$/.test(host)) return true;
return false;
}
if (isVPN2(host)) {
return ["PROXY 127.0.0.1:28080", DIRECT].join("; ");
}
function isPrivate(host) {
return /^(10|127)\.\d+\.\d+\.\d+$/.test(host) ||
/^192\.168\.\d+\.\d+$/.test(host) ||
/^172\.(1[6789]|2\d|3[01])\.\d+\.\d+$/.test(host);
}
// isPlainHostName: [.]ドットが含まれていない場合true(ex: localhost)
if (isPlainHostName(host) || isPrivate(host)) {
return DIRECT;
}
var DIRECT_APPLY_HOSTS = [
// 完全一致
// "www.example.com"
// 部分一致
// "*.example.com"
];
for (var i = 0, len = DIRECT_APPLY_HOSTS.length; i < len; i++) {
if (shExpMatch(host, DIRECT_APPLY_HOSTS[i])) {
return DIRECT;
}
}
var PROXY_APPLY_HOSTS = [
// 完全一致
// "www.example.com"
// 部分一致
// "*.example.com"
];
for (var i = 0, len = PROXY_APPLY_HOSTS.length; i < len; i++) {
if (shExpMatch(host, PROXY_APPLY_HOSTS[i])) {
return PROXY;
}
}
// proxy優先(落ちていたらダイレクト)
return [PROXY, DIRECT].join("; ");
// 必ずproxy経由
// return PROXY;
// プロキシを経由しない
// return DIRECT;
}