he.net上可以直接看到任何AS所归属的IP段。可以写个脚本查询一下,默认是把curl屏蔽了的可以改一下UA。
#!/usr/bin/python import urllib2 import sys import os import re import string class AS_TO_ACL: def __init__(self,asnum): self.asnum=asnum; self.url="http://bgp.he.net/AS%s#_prefixes"%(self.asnum) self.cidr=set(); def http_client(self,url): request=urllib2.Request(url,headers={'User-agent':"Chrome 27.0"}) try: response=urllib2.urlopen(request,timeout=5) info=response.info() data=response.read() except urllib2.HTTPError,error: print "%s error:%s" %(url,error.reason) return None except urllib2.URLError,error: print error.reason return None else: outdata=data return outdata def get_acl(self): htmldata=self.http_client(self.url) ip_reg=re.compile("/net/(\d+\.\d+.\d+\.\d+/\d+)") htmls=htmldata.split(); for line in htmls: match=ip_reg.search(line) if match: ips=match.group(1) self.cidr.add(string.strip(ips)) for ip in self.cidr: print "%s;\n"%(ip), if len(sys.argv)<2: print "error!" print "as_to_acl ASN" sys.exit(1) query=AS_TO_ACL(sys.argv[1]) query.get_acl()
运行一下就可以把教育网的IP段都捞出来了。
python as_to_acl.py 4538