根据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

点赞