excel生成配置脚本

数据导出脚本

import re
import pandas
import pandas as pd

import requests
url='https://www.peeringdb.com/ix/125'
head={"Cookie":
"_ga=GA1.1.1759601437.1680828385; _ga_GT0P7ZPTEH=GS1.1.1680861303.4.0.1680861303.0.0.0; django_language=en; sessionid=zo85n9vkyswgvrtangvd5tc0xzwazk7f; _ga_14LRNCMV44=GS1.1.1688003243.4.1.1688004107.0.0.0",
      "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"}
resp=requests.get(url,headers=head)


def get_email(url, head):
    mails = []
    resp = requests.get(url, headers=head)

    # print(resp.text)
    obj = re.compile(r'<div class="email".*?data-edit-name="email">(?P<mail>.*?)</div>', re.S)
    obj1=re.compile(r'data-edit-name="info_prefixes4">(?P<ipv4_num>.*?)</div>.*?'
                    r'data-edit-name="info_prefixes6">(?P<ipv6_num>.*?)</div>.*?',re.S)
    for it in obj.finditer(resp.text):
        mail = it.group('mail').strip()
        if 'abuse' in mail or 'sale' in mail: continue
        if mail not in mails:
            mails.append(mail)
    for it in obj1.finditer(resp.text):
        ipv4_num=it.group('ipv4_num')
        ipv6_num=it.group('ipv6_num')
    return ipv4_num,ipv6_num,','.join(mails)
def convert_name(name):
    obj=re.compile(r'(\s|\(|\)|\,|\.|!|/|\-)+')
    name=obj.sub('_',name).rstrip('_')
    return name

obj = re.compile(r'<div class="row item operational">.*?'
                     r'<a href="(?P<url>.*?)">(?P<company>.*?)</a>.*?'
                     r'<div class="asn" data-sort-value=".*?" data-filter-value=".*?">(?P<as>.*?)</div>.*?'
                     r'<div class="speed" data-sort-value=".*?" data-filter-value=".*?">(?P<speed>.*?)</div>.*?'
                     r'<div class="policy" data-filter-value=.*?>(?P<policy>.*?)</div>.*?'
                     r'<div class="ip4" data-sort-value=".*?" data-filter-value=".*?">(?P<ipv4>.*?)</div>.*?'
                     r'<div class="ip6" data-sort-value=".*?" data-filter-value=".*?">(?P<ipv6>.*?)</div>', re.S)


dics=[]
nums=['15133', '8075', '6939', '53813', '23930', '15169', '32934', '9269', '38082', '16509', '36351', '2635', '30419', '7713', '13335', '136907', '10310', '9505', '41913', '9416', '32590', '4775', '45102', '20940', '18403', '9848', '55967', '2906', '714', '46489', '132203', '8757', '8966', '135391', '138997', '32787', '59318', '17709', '49544', '14537', '9658', '199524', '54994', '134366', '17408', '9902', '58879', '9312', '24429', '1828', '38235', '45899', '62955', '24115', '9908', '137557', '398704', '132337', '131618', '142271', '139057', '137409', '131314', '45187']
for it in obj.finditer(resp.text):
    dic={}
    url=it.group('url')
    url='https://www.peeringdb.com'+url
    company=it.group('company').strip()
    name=convert_name(company)
    as_num=it.group('as')
    ipv4=it.group('ipv4')
    ipv6=it.group('ipv6')
    speed=it.group('speed')
    policy=it.group('policy').strip()
    if policy:
        policy=policy.split()[-1]
    else:
        policy="None"
    # print(company,as_num,ipv4,ipv6,url)
    result=get_email(url,head)
    mail=result[-1]
    ipv4_num=result[0]
    ipv6_num=result[1]
    if as_num in nums:
        finished='Y'
    else:
        finished='N'

    dic['company']=company
    dic['name']=name
    dic['as_num']=as_num
    dic['ipv4']=ipv4
    dic['ipv6']=ipv6
    dic['speed']=speed
    dic['policy']=policy
    dic['finished']=finished
    dic['ipv4_num']=ipv4_num
    dic['ipv6_num']=ipv6_num
    dic['mail'] = mail
    dic['url'] = url
    dics.append(dic)
    print(dic)

df=pd.DataFrame(dics)
df.to_excel('/Users/lifei/Downloads/hk1.xlsx', sheet_name='hk1', index=False)

生成配置脚本

# 导入模块
import requests
import sys
import re
# 定义读取函数
def convert_name(name):
    obj=re.compile(r'(\s|\(|\)|\,|\.|!|/|\-)+')
    name=obj.sub('_',name).rstrip('_')
    return name

def peizhishengcheng(ix_name,name,ipv4,ipv6,ipv4_num,ipv6_num,num):

# 遍历记录
    if ix_name=='hkix':
        ipv4_in='HKIX-in'
        ipv4_out='HKIX-Out'
        ipv6_in='Reject-IN'
        ipv6_out='Reject6-export'
    elif ix_name=='ffix':
        ipv4_in='Equinix-IMPORT'
        ipv4_out='Equinix-EXPORT'
        ipv6_in='Reject-import'
        ipv6_out='Equinix-EXPORT-ipv6'
    elif ix_name=='hk1':
        ipv4_in = 'HK-hk1_in'
        ipv4_out = 'HK1-out'
        ipv6_in = 'Reject-import'
        ipv6_out = 'Reject6-export'
    elif ix_name=='sgix':
        ipv4_in = 'SG-Equinix-in'
        ipv4_out = 'SG-Equinix-Out'
        ipv6_in = 'Reject-import'
        ipv6_out = 'Reject6-export'
    ipv4_num=int(int(ipv4_num)*1.2)
    ipv6_num=int(int(ipv6_num)*1.2)
    count=1
    if num>1:
        name=name+"-"+str(num)
    if ipv4:
        name=name+'-ipv4'
        print('''set protocols bgp group %s type external
set protocols bgp group %s import %s
set protocols bgp group %s family inet unicast rib-group HaiWai
set protocols bgp group %s export %s
set protocols bgp group %s peer-as %s
set protocols bgp group %s family inet unicast prefix-limit maximum %s
set protocols bgp group %s family inet unicast prefix-limit teardown idle-timeout 2400
set protocols bgp group %s neighbor %s
''' %(name,name,ipv4_in,name,name,ipv4_out,name,as_num,name,ipv4_num,name,name,ipv4))
    if ipv6:
        name=name.replace('ipv4','ipv6')
        print('''set protocols bgp group %s type external
set protocols bgp group %s import %s
set protocols bgp group %s family inet6 unicast prefix-limit maximum %s
set protocols bgp group %s family inet6 unicast prefix-limit teardown idle-timeout 2400
set protocols bgp group %s export %s
set protocols bgp group %s peer-as %s
set protocols bgp group %s neighbor %s''' %(name,name,ipv6_in,name,ipv6_num,name,name,ipv6_out,name,as_num,name,ipv6))

#     print("=============下面是邮件发送===========")
#     print('''Dear %s's Peering Team:
# Now the peer is UP.
#
#
#
# Have a nice day!
# ''' %company)

def get_email(url, head):
    resp = requests.get(url, headers=head)

    # print(resp.text)
    obj1=re.compile(r'data-edit-name="info_prefixes4">(?P<ipv4_num>.*?)</div>.*?'
                    r'data-edit-name="info_prefixes6">(?P<ipv6_num>.*?)</div>.*?',re.S)

    for it in obj1.finditer(resp.text):
        ipv4_num=it.group('ipv4_num')
        ipv6_num=it.group('ipv6_num')
    return ipv4_num,ipv6_num
def getpeer(ix_name,as_number):
    if ix_name=='hkix':
        url='https://www.peeringdb.com/ix/42'
    elif ix_name=='hk1':
        url='https://www.peeringdb.com/ix/125'
    elif ix_name=='sgix':
        url='https://www.peeringdb.com/ix/158'
    elif ix_name=='ffix':
        url='https://www.peeringdb.com/ix/1998'
    head = {"Cookie":
                "_ga=GA1.1.1759601437.1680828385; _ga_GT0P7ZPTEH=GS1.1.1680861303.4.0.1680861303.0.0.0; django_language=en; sessionid=zo85n9vkyswgvrtangvd5tc0xzwazk7f; _ga_14LRNCMV44=GS1.1.1688003243.4.1.1688004107.0.0.0",
            "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"}
    resp = requests.get(url, headers=head)

    obj = re.compile(r'<div class="row item operational">.*?'
                     r'<a href="(?P<url>.*?)">(?P<company>.*?)</a>.*?'
                     r'<div class="asn" data-sort-value=".*?" data-filter-value=".*?">(?P<as>.*?)</div>.*?'
                     r'<div class="speed" data-sort-value=".*?" data-filter-value=".*?">(?P<speed>.*?)</div>.*?'
                     # r'<div class="policy" data-filter-value=.*?<span.*?</span>(?P<policy>.*?)</div>.*?'
                     r'<div class="policy" data-filter-value=.*?>(?P<policy>.*?)</div>.*?'
                     r'<div class="ip4" data-sort-value=".*?" data-filter-value=".*?">(?P<ipv4>.*?)</div>.*?'
                     r'<div class="ip6" data-sort-value=".*?" data-filter-value=".*?">(?P<ipv6>.*?)</div>', re.S)
    num=1
    flag=1
    for it in obj.finditer(resp.text):
        url = it.group('url')
        url = 'https://www.peeringdb.com' + url
        company = it.group('company').strip()
        name = convert_name(company)
        as_num = it.group('as')
        ipv4 = it.group('ipv4')
        ipv6 = it.group('ipv6')


        if as_number==as_num:
            if flag:
                ipv4_num, ipv6_num=get_email(url,head)
                flag=0
            # print(ipv4,ipv6,as_num,url,name,as_num)
            peizhishengcheng(ix_name,name,ipv4,ipv6,ipv4_num,ipv6_num,num)
            num=num+1
            company1=company
    if company1:
        print("=============下面是邮件发送===========")
        print('''Dear %s's Peering Team:
Now the peer is UP.
    
    
    
Have a nice day!
        ''' %company1)




if __name__=='__main__':
    as_num=sys.argv[2]
    ix_name=sys.argv[1]
    getpeer(ix_name,as_num)



GeoIP2-ISP 库生成脚本

import re
from netaddr import IPSet
from mmdb_writer import MMDBWriter

def net_process(content):
    # 把 database_type、description、languages 都传给构造函数
    writer = MMDBWriter(
        ip_version=4,
        database_type="GeoIP2-ISP",                     # 告诉 Logstash 这是一个 ISP 类型数据库
        languages=["en"],
        description={"en": "Custom ISP database for Logstash"}
    )

    decix_regex = re.compile(r'206\.53\.')
    eqix_regex = re.compile(r'206\.223\.')
    cogent_regex = re.compile(r'38\.104\.')
    obj_regex = re.compile(
        r'(?P<net>(\d+\.){3}\d+/\d+),.*?(?P<next_hop>(\d+\.){3}\d+)',
        re.S
    )

    for m in obj_regex.finditer(content):
        net = m.group('net')
        next_hop = m.group('next_hop')
        if net=='0.0.0.0/0':continue
        if decix_regex.match(next_hop):
            isp = 'decix'
        elif eqix_regex.match(next_hop):
            isp = 'eqix'
        elif cogent_regex.match(next_hop):
            isp = 'cogent'
        else:
            isp = 'local'

        print(f"Insert {net} => {isp}")
        writer.insert_network(
            IPSet([net]),
            {

                    "isp": isp

            }
        )

    writer.to_db_file('custom.mmdb')
    print("custom.mmdb 写入完成")

if __name__ == '__main__':
    with open('/Users/lifei/Downloads/dallas.log') as f:
        data = f.read()
    net_process(data)
posted @ 2023-06-29 22:10  lifei888  阅读(232)  评论(0)    收藏  举报