python自动更新国内IP地址合集

注意:笔者使用的是python3,Windows10系统,华为USG6300防火墙

背景:当职网络有国内出口跟海外出口(访问google)时,偶尔会遇到部分网站打不开或加载速度慢,大概率是访问国内资源从海外出口走,访问海外资源亦是如此,由于路由不准确导致,笔者之前通过IANA获取的地址合集路由命中率不高(云厂商真会玩),经过多番查找,在github上找到了相对准确的国内地址合集,大概每月更新一次,为什么是获取国内的地址合集,国内地址合集目前大约6千多条,海外合集几万条。

此教程为两篇(上篇基础使用,下篇相对代码偏多)

上篇为如何获取IP地址合集,如何将地址下发给设备

本篇为自动同步地址合集(自动对地址合集做增删操作)

代码如下:

import requests
from netmiko import ConnectHandler
import time

time1 = time.time()
new_time = time.strftime("%Y-%m-%d", time.localtime())
new_ip_list = []
dev_ip_list_01 = []
dev_ip_list_02 = []
dev_ip_list_all = []
add_address = []
delete_address = []
add_address_comm_01 = ['ip address-set IP-CN01 type object']
add_address_comm_02 = ['ip address-set IP-CN02 type object']
delete_address_comm_01 = ['ip address-set IP-CN01 type object']
delete_address_comm_02 = ['ip address-set IP-CN02 type object']


def get_new_ip_list():
    url = 'https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt'
    try:
        header = {
   
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,'
                      '*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/96.0.4664.110 Safari/537.36',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2',
            'Connection': 'keep-alive',
            'path': '/17mon/china_ip_list/master/china_ip_list.tx'
        }

        r = requests.get(url, headers=header, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        new_ip_list_01 = r.text
        with open(f'D:\\Python\\network\\update_ip_china\\new_ip\\new_ip_{
     new_time}.txt', 'w') as new_ip:
            new_ip.write(new_ip_list_01)
        new_ip_list_02 = new_ip_list_01.strip().split('\n')
        for new_ip_list_03 in new_ip_list_02:
            new_ip_list.append(new_ip_list_03)

        print(f'最新国内IP地址条目为: {
     len(new_ip_list)}\n')

    except Exception as e:
        print(e)


def get_dev_ip_list():
    try:
        device = {
   'device_type': 'huawei', 'host': '10.100.0.200', 'username': 'python', 'password': '123456.com'}
        ssh_client = ConnectHandler(**device)
        print('开始获取防火墙现有国内IP地址集合')
        ger_dev_ip_list_01 = ssh_client.send_command('display ip address-set verbose IP-CN01 item')
        with open('ip_01.txt', 'w+') as ip01:
            ip01.write(ger_dev_ip_list_01)

        ger_dev_ip_list_02 = ssh_client.send_command('display ip address-set verbose IP-CN02 item')
        with open('ip_02.txt', 'w+') as ip02:
            ip02.write(ger_dev_ip_list_02)

    except Exception as e:
        print(e)


def format_add():
    with open('ip_01.txt') as ip01:
        ip01_2 = ip01.read().strip().replace(' mask ', '/').replace(' address ', '')
        ip01_3 = ip01_2.split('\n')
        for ip01_4 in ip01_3[7:]:
            ip01_5 = ip01_4.split(' ')[1]
            dev_ip_list_01.append(ip01_5)
            dev_ip_list_all.append(ip01_5)

    with open('ip_02.txt') as ip02:
        ip02_2 = ip02.read().strip().replace(' mask '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值