根据AS号查询IP段

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

cert_ip