|
|
@ -4,49 +4,27 @@ |
|
|
|
import os |
|
|
|
from IPy import IP, IPSet |
|
|
|
|
|
|
|
operators = ['china', 'cmcc', 'chinanet', 'unicom', 'tietong', 'cernet', 'cstnet', 'drpeng', 'googlecn'] |
|
|
|
operators += ['%s6' % x for x in operators] # add `...6` suffix |
|
|
|
source = [ |
|
|
|
'curl -sL https://github.com/misakaio/chnroutes2/raw/master/chnroutes.txt | sed \'/^#/d\'', |
|
|
|
'curl -sL https://github.com/metowolf/iplist/raw/master/data/special/china.txt', |
|
|
|
'curl -sL https://github.com/17mon/china_ip_list/raw/master/china_ip_list.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cernet.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/china.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/chinanet.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cmcc.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cstnet.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/drpeng.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/googlecn.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/tietong.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/unicom.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cernet6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/china6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/chinanet6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cmcc6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/cstnet6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/drpeng6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/googlecn6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/tietong6.txt', |
|
|
|
'curl -sL https://gaoyifan.github.io/china-operator-ip/unicom6.txt', |
|
|
|
] |
|
|
|
] + ['curl -sL https://gaoyifan.github.io/china-operator-ip/%s.txt' % x for x in operators] |
|
|
|
|
|
|
|
ips = set() |
|
|
|
for script in source: |
|
|
|
ipv4 = IPSet() |
|
|
|
ipv6 = IPSet() |
|
|
|
ipAddrs = set() |
|
|
|
for script in source: # traverse fetch commands |
|
|
|
raw = os.popen(script).read().split('\n') |
|
|
|
ips.update(filter(None, raw)) |
|
|
|
|
|
|
|
v4 = IPSet() |
|
|
|
v6 = IPSet() |
|
|
|
for ip in ips: |
|
|
|
ipAddrs.update(filter(None, raw)) |
|
|
|
for ipAddr in ipAddrs: |
|
|
|
try: |
|
|
|
ipAddr = IP(ip) |
|
|
|
(v4 if ipAddr.version() == 4 else v6).add(ipAddr) |
|
|
|
except: |
|
|
|
pass |
|
|
|
|
|
|
|
ips = [] |
|
|
|
for ip in v4: |
|
|
|
ips.append(str(ip) + ('' if '/' in str(ip) else '/32')) |
|
|
|
for ip in v6: |
|
|
|
ips.append(str(ip) + ('' if '/' in str(ip) else '/128')) |
|
|
|
ip = IP(ipAddr) # ip format check |
|
|
|
(ipv4 if ip.version() == 4 else ipv6).add(ip) |
|
|
|
except: pass |
|
|
|
|
|
|
|
release = [('%s' if '/' in str(ip) else '%s/32') % str(ip) for ip in ipv4] # format into CIDR |
|
|
|
release += [('%s' if '/' in str(ip) else '%s/128') % str(ip) for ip in ipv6] |
|
|
|
with open('china-ip.txt', 'w') as fileObj: |
|
|
|
fileObj.write('\n'.join(ips) + '\n') |
|
|
|
fileObj.write('\n'.join(release) + '\n') |
|
|
|