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
