python_tracert_as

import re
import netaddr
import requests

def ipv4_collect():
    ip_group=[]
    ip_re=re.compile(r'.*?(\d+\.\d+\.\d+)\.\d+')
    for line in open('../result.txt'):
        line=line.rstrip()
        if ip_re.match(line):
            ip=ip_re.match(line).group(1)+'.10'
            if ip not in ip_group:
                ip_group.append(ip)
    return ip_group

def bgp_he(ip):
    head = {"Cookie":"__utmz=83743493.1663978643.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _gcl_au=1.1.907536628.1693559763; __utma=83743493.548144918.1663978643.1695298769.1698454506.25; _bgp_session=BAh7BzoPc2Vzc2lvbl9pZEkiJTgwYzE0YjYyMDhhMjQ1YjlhNzIxOTQyOTI0OTA0NTYzBjoGRUY6EF9jc3JmX3Rva2VuSSIxUW9vZkVxWnVNWjhXbVZGNEJRZXhraWNYdFFiZGU5bSt2cnV2SlFYY0pEaz0GOwZG--e0227e0bd55dde45f0a2af8ad25337e8b8075f43",
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
    url=f'https://bgp.he.net/ip/{ip}'
    resp=requests.get(url,headers=head)
    content=resp.text
    url_pattern=r'''<table>.*?<tbody>.*?<tr>.*<td><a href="/AS.*?>(?P<as_num>AS.*?)</a></td>.*?</tr>.*?<tbody>'''
    url_re=re.compile(url_pattern,re.S)
    if url_re.search(content):
        as_num=url_re.search(content).group('as_num')
        return as_num
    
        
def ip_pro(ip):
    ip=netaddr.IPAddress(ip)
    if ip.is_private():
        return
    else:
        return bgp_he(ip)


def ip_dic(ips):
    ip_dic={}
    for ip in ips:
        if ip not in ip_dic:
            value=ip_pro(ip)
            ip='.'.join(ip.split('.')[0:3])
            ip_dic[ip]=value
    return ip_dic
 


ip_group=ipv4_collect()

if __name__=='__main__':
    ip_group=ipv4_collect()
    ip_dics=ip_dic(ip_group)
    for line in open('../result.txt'):
        line=line.rstrip()
        ip_re=re.compile(r'\d+\.\d+\.\d+\.\d+')
        if ip_re.search(line):
            ipv4=ip_re.search(line).group()
            result=ip_dics.get('.'.join(ipv4.split('.')[0:3]))
            if result:
                result="["+result+"]"
                print(line.replace(ipv4,ipv4+result))
            else:
                print(line)

        else:
            print(line)

posted @ 2023-11-10 07:14  lifei888  阅读(21)  评论(0)    收藏  举报