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
