diff --git a/assets/china-ip.py b/assets/china-ip.py new file mode 100755 index 0000000..b25eeac --- /dev/null +++ b/assets/china-ip.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +from IPy import IP, IPSet + +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', +] + +ips = set() +for script in source: + raw = os.popen(script).read().split('\n') + ips.update(filter(None, raw)) + +v4 = IPSet() +v6 = IPSet() +for ip in ips: + 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')) + +print('\n'.join(ips))