mirror of
https://github.com/iBug/pac.git
synced 2025-07-13 21:02:16 +08:00
add Maxmind-GeoLite2 & naming
This commit is contained in:
parent
b42f8e2ca5
commit
713f5e397b
58
build.py
58
build.py
@ -8,14 +8,16 @@ from requests.exceptions import RequestException, HTTPError
|
||||
|
||||
import gfwlist
|
||||
|
||||
|
||||
SOURCES = {
|
||||
SOURCES_4 = {
|
||||
'ipdeny.com': 'http://www.ipdeny.com/ipblocks/data/aggregated/cn-aggregated.zone',
|
||||
'17mon': 'https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt',
|
||||
}
|
||||
SOURCES2 = {
|
||||
SOURCES_6 = {
|
||||
'gaoyifan': 'https://gaoyifan.github.io/china-operator-ip/china6.txt',
|
||||
}
|
||||
SOURCES_46 = {
|
||||
'maxmind': 'https://github.com/v2fly/geoip/raw/release/text/cn.txt',
|
||||
}
|
||||
OUT_DIR = "dist"
|
||||
|
||||
# Stub content to disable GFWList check
|
||||
@ -28,6 +30,8 @@ def fetch_and_convert(src):
|
||||
template = "var CHINA = [\n{}\n];\n"
|
||||
lines = []
|
||||
for iprange in response.text.strip().split("\n"):
|
||||
if iprange.find(":") != -1:
|
||||
break
|
||||
ipnet = ipaddress.IPv4Network(iprange)
|
||||
netaddr = int(ipnet.network_address)
|
||||
netmask = int(ipnet.netmask)
|
||||
@ -57,6 +61,8 @@ def fetch_and_convert_ip6(src):
|
||||
fixlen = len(f" [0xFFFFFFFF, -1, 0xFFFFFFFF],")
|
||||
|
||||
for iprange in text.strip().split("\n"):
|
||||
if iprange.find(":") == -1:
|
||||
continue
|
||||
ipnet = ipaddress.IPv6Network(iprange)
|
||||
prefixlen = ipnet.prefixlen
|
||||
fulladdr = str(ipnet.exploded).replace(':', '')
|
||||
@ -131,34 +137,62 @@ def main():
|
||||
gfwlist_stub = GFWLIST_STUB
|
||||
|
||||
os.makedirs(OUT_DIR, mode=0o755, exist_ok=True)
|
||||
for key in SOURCES:
|
||||
print(f"Generating PAC script from source {key}")
|
||||
for key in SOURCES_4:
|
||||
key_6 = list(SOURCES_6)[0]
|
||||
print(f"Generating PAC script from source {key}(IPv4) & {key_6}(IPv6)")
|
||||
try:
|
||||
data = fetch_and_convert(SOURCES[key])
|
||||
key2 = list(SOURCES2)[0]
|
||||
data2 = fetch_and_convert_ip6(SOURCES2[key2])
|
||||
data = fetch_and_convert(SOURCES_4[key])
|
||||
data_6 = fetch_and_convert_ip6(SOURCES_6[key_6])
|
||||
except RequestException:
|
||||
continue
|
||||
except HTTPError:
|
||||
continue
|
||||
|
||||
filename = f"pac-{key}-{key2}.txt"
|
||||
filename_gfwlist = f"pac-gfwlist-{key}-{key2}.txt"
|
||||
filename = f"pac-IPv4_{key}--IPv6_{key_6}.txt"
|
||||
filename_gfwlist = f"pac-gfwlist-IPv4_{key}--IPv6_{key_6}.txt"
|
||||
with open(os.path.join(OUT_DIR, filename), "w") as f:
|
||||
f.write(code)
|
||||
f.write(data)
|
||||
f.write("\n")
|
||||
f.write(data2)
|
||||
f.write(data_6)
|
||||
f.write("\n")
|
||||
f.write(gfwlist_stub)
|
||||
with open(os.path.join(OUT_DIR, filename_gfwlist), "w") as f:
|
||||
f.write(code)
|
||||
f.write(data)
|
||||
f.write("\n")
|
||||
f.write(data2)
|
||||
f.write(data_6)
|
||||
f.write("\n")
|
||||
f.write(gfwlist_part)
|
||||
|
||||
for key in SOURCES_46:
|
||||
print(f"Generating PAC script from source {key}(IPv4v6)")
|
||||
try:
|
||||
data = fetch_and_convert(SOURCES_46[key])
|
||||
data_6 = fetch_and_convert_ip6(SOURCES_46[key])
|
||||
except RequestException:
|
||||
continue
|
||||
except HTTPError:
|
||||
continue
|
||||
|
||||
filename = f"pac-IPv4v6_{key}.txt"
|
||||
filename_gfwlist = f"pac-gfwlist-IPv4v6_{key}.txt"
|
||||
with open(os.path.join(OUT_DIR, filename), "w") as f:
|
||||
f.write(code)
|
||||
f.write(data)
|
||||
f.write("\n")
|
||||
f.write(data_6)
|
||||
f.write("\n")
|
||||
f.write(gfwlist_stub)
|
||||
with open(os.path.join(OUT_DIR, filename_gfwlist), "w") as f:
|
||||
f.write(code)
|
||||
f.write(data)
|
||||
f.write("\n")
|
||||
f.write(data_6)
|
||||
f.write("\n")
|
||||
f.write(gfwlist_part)
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
10
code.js
10
code.js
@ -19,14 +19,14 @@ function binarySearch(list, num, lower, upper) {
|
||||
return x;
|
||||
}
|
||||
|
||||
function convertToInt6(high, low) {
|
||||
function convertToUInt6(high, low) {
|
||||
var num1 = parseInt(high, 16) & 0xFFFF;
|
||||
var num2 = parseInt(low, 16) & 0xFFFF;
|
||||
return (((num1 << 16) | num2) >>> 0);
|
||||
}
|
||||
|
||||
function isInNet6(parts, list, list2) {
|
||||
var num = convertToInt6(parts[0], parts[1]);
|
||||
var num = convertToUInt6(parts[0], parts[1]);
|
||||
var x = binarySearch(list, num, 0, list.length);
|
||||
|
||||
if (list[x][1] == -1)
|
||||
@ -36,7 +36,7 @@ function isInNet6(parts, list, list2) {
|
||||
if (num !== list[x][0])
|
||||
return false;
|
||||
|
||||
var num2 = convertToInt6(parts[2], parts[3]);
|
||||
var num2 = convertToUInt6(parts[2], parts[3]);
|
||||
var x2 = binarySearch(list2, num2, list[x][1], list[x][2] + 1);
|
||||
|
||||
return (((num2 & list2[x2][1]) ^ list2[x2][0]) === 0);
|
||||
@ -91,14 +91,14 @@ function isLanOrChina6(host) {
|
||||
return isInNet6(parts, CHINA6_F, CHINA6_S) || isInNet6(parts, LAN6_F, LAN6_S);
|
||||
}
|
||||
|
||||
function convertToInt(host) {
|
||||
function convertToUInt(host) {
|
||||
var bytes = host.split(".");
|
||||
var result = ((bytes[0] & 0xFF) << 24) | ((bytes[1] & 0xFF) << 16) | ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF);
|
||||
return (result >>> 0);
|
||||
}
|
||||
|
||||
function belongsToSubnet(host, list) {
|
||||
var ip = convertToInt(host);
|
||||
var ip = convertToUInt(host);
|
||||
|
||||
if (list.length === 0 || ip < list[0][0])
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user