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

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

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

下篇为自动同步地址合集(自动对地址合集做增删操作):下篇 点击跳转
首先配置环境使用pip 安装第三方库

需要使用的python第三方库工两个requests、netmiko
pip install requests (笔者之前已经安装)使用方法请查看官方手册:Requests: HTTP for Humans™

pip install netmiko(笔者之前已经安装)使用方法请参照
@弈心 弈心:网络工程师的Python之路 – Netmiko终极指南
@朱嘉盛 朱嘉盛:专栏入口(阅读目录+故事简介+交流渠道)

获取China IP合集链接
IP地址合计从giuhub上获取https://github.com/17mon/china_ip_list/blob/master/china_ip_list.txt,大概每个月更新一次;
脚本使用地址为:https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt

代码如下:

import requests
from netmiko import ConnectHandlernew_ip_list = []
add_dev_ip_address_1 = ['ip address-set IP-CN01 type object']
add_dev_ip_address_2 = ['ip address-set IP-CN02 type object']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_encodingnew_ip_list_01 = r.textnew_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)except Exception as e:print(e)print(f'最新国内IP地址合集条目为: {len(new_ip_list)}\n')for new_ip_list1 in new_ip_list[:3998]:add_dev_ip_address_1_1 = new_ip_list1.replace('/', ' mask ')add_dev_ip_address_1.append(f'address {add_dev_ip_address_1_1}')for new_ip_list2 in new_ip_list[3998:]:add_dev_ip_address_2_1 = new_ip_list2.replace('/', ' mask ')add_dev_ip_address_2.append(f'address {add_dev_ip_address_2_1}')print(f'----第一个IP合集为:{len(add_dev_ip_address_1)}----\n----第二个IP合集为:{len(add_dev_ip_address_2)}----\n')try:device = {'device_type': 'huawei', 'host': '10.10.0.1', 'username': 'python', 'password': '123.com'}ssh_client = ConnectHandler(**device)print('---开始下发防火墙现有IP地址集合---\n')add_address_comm_01_log = ssh_client.send_config_set(add_dev_ip_address_1)add_address_comm_02_log = ssh_client.send_config_set(add_dev_ip_address_2)print(f'-----下面是地址组1的命令日志-----\n{add_address_comm_01_log}\n')print(f'-----下面是地址组2的命令日志-----\n{add_address_comm_02_log}')
except Exception as e:print(e)

在防火墙上配置地址合集及选路策略
创建一个名为IP-CN 的地址组将IP-CN01 和 IP-CN02 添加到地址组中

创建策略路由

代码讲解:

import requests
from netmiko import ConnectHandler

上述代码 为导入第三方模块

new_ip_list = []

上述代码 用于格式化从guthub上得到的IP地址合集;

add_dev_ip_address_1 = ['ip address-set IP-CN01 type object']
add_dev_ip_address_2 = ['ip address-set IP-CN02 type object']

上述代码 笔者使用华为USG6300防火墙单个地址合集最大支持3999个,当前的地址合集为(6125),所以需要两个列表存放命令;ip address-set IP-CN01 type object 和 ip address-set IP-CN02 type object 在设备上创建两个IP地址合集。
url = ‘https://raw.githubusercontent.com/17mon/china_ip_list/master/china_ip_list.txt’
上述代码 定义一个URL

 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'}

上述代码 header = {}字段构建https请求头部(太简单会被拒绝),相关信息可以通过谷歌浏览器开发者工具中获取

r = requests.get(url, headers=header, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
new_ip_list_01 = r.text

上述代码 得到网页上的相关内容通过输出为文本格式

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)

strip()函数删除文本中的空白行,split(’\n’) 通过换行符号(\n)将文件切片写入new_ip_list中

for new_ip_list1 in new_ip_list[:3998]:add_dev_ip_address_1_1 = new_ip_list1.replace('/', ' mask ')add_dev_ip_address_1.append(f'address {add_dev_ip_address_1_1}')for new_ip_list2 in new_ip_list[3998:]:add_dev_ip_address_2_1 = new_ip_list2.replace('/', ' mask ')add_dev_ip_address_2.append(f'address {add_dev_ip_address_2_1}')

for new_ip_list1 in new_ip_list[:3998] 使用for循环提取new_ip_list 中 1-3999 的值;
for new_ip_list2 in new_ip_list[3998:] 使用for循环提取new_ip_list 中 3999-末尾 的值;
add_dev_ip_address_2_1 = new_ip_list2.replace(’/’, ’ mask ‘) 将单个字符串中的/ 替换为mask;
add_dev_ip_address_2.append(f’address {add_dev_ip_address_2_1}’) 将字符串格式化为address 1.1.1.0 mask 24
上图为部分格式的内容

try:device = {'device_type': 'huawei', 'host': '10.10.0.1', 'username': 'python', 'password': '123.com'}ssh_client = ConnectHandler(**device)print('---开始下发防火墙现有IP地址集合---\n')add_address_comm_01_log = ssh_client.send_config_set(add_dev_ip_address_1)add_address_comm_02_log = ssh_client.send_config_set(add_dev_ip_address_2)print(f'-----下面是地址组1的命令日志-----\n{add_address_comm_01_log}\n')print(f'-----下面是地址组2的命令日志-----\n{{add_address_comm_02_log}')
except Exception as e:print(e)

登录网络设备开始下发配置,根据实际情况填写相关信息。

python获取国内IP地址合集下发至网络设备相关推荐

  1. python获取eth0_详解 Python 获取网卡 IP 地址的黑魔法

    在 StackOverflow 上流传着这样一份用 Python 获取网卡 IPv4 地址的神秘代码. 1 2 3 4 5 6 7 8 9 10 11 12import socket import f ...

  2. Python获取代理IP地址

    代码: import requests from bs4 import BeautifulSoup# 获取代理ip TEST_URL = 'https://www.kuaidaili.com/free ...

  3. 用python检测电脑IP地址是否发生变化并提醒自己

    前言 有时候我们需要电脑的IP地址进行远程访问或者作其他用途,倘若自己的IP是动态分配且无法固定的话,某一时候IP地址突然变更了而自己不知道那倒是挺折腾人的.特别是在别的地方想要远程自己的电脑的时候, ...

  4. 利用python写一个自动获取局域网ip地址并开启服务器绕过校园网设备限制的小工具

    前言 ​ 这个学年学校把宽带运营商从之前的联通大哥哥换成了如今的电信小弟弟,使用体验可谓一落千丈,最主要的原因是电信不再像联通提供拨号上网的账号和密码,改成了强制使用天翼校园的程序来进行认证上网,而且 ...

  5. 【开发利器】中国国内可用API合集

    中国国内可用API合集 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网站 快递查询 旅游 社交 视频 天气 团队协作 图片与图像处理 外卖 消息推送 音乐 云 语音识别 综合 笔记 On ...

  6. 中国国内可用API合集

    中国国内可用API合集 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网站 快递查询 旅游 社交 视频 天气 团队协作 图片与图像处理 外卖 消息推送 音乐 云 语音识别 综合 笔记 On ...

  7. 中国国内 - 可用API合集

    中国国内 - 可用API合集 收录一篇中国国内可用API合集,分享给大家 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网站 快递查询 旅游 社交 视频 天气 团队协作 图片与图像处理 外 ...

  8. 【开发必备】2018最新中国国内可用API合集

    中国国内可用API合集 笔记 OneNote - OneNote支持获取,复制,创建,更新,导入与导出笔记,支持为笔记添加多媒体内容,管理权限等.提供SDK和Demo. 为知笔记 - 为知笔记Wind ...

  9. Python研发工程师必备工具合集

    Python研发工程师必备工具合集 1.必备工具 2.常用网站 3.学习路线 4.必备技能 5.书籍推荐 6.进阶学习 一.必备工具: 1.Sublime Text 2.Notepad++ 3.Vis ...

  10. 老大说,网上这种获取真实IP地址的方法不对,我不信...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:蔡永吉  来源:http://bit.ly/33H8RMm ...

最新文章

  1. 为什么读博士以及有什么意义
  2. 双11不过瘾?双十二低至半价继续抢,更有免费学的机会等你抢!
  3. java8新特性简述
  4. android 进程间通信数据(一)------parcel的起源
  5. .NET生态系统概览
  6. 最小化或关闭时隐藏到系统托盘
  7. Redis研究-3.7 有序集合中范围以及数学集合运算
  8. 下载Visual Studio 2008 Beta 2
  9. mysql中的like查询能否用的到索引
  10. 【转载】国产手机MTK平台MRP软件应用安装大全
  11. 人生时间计算器_真实年龄计算器app下载-抖音珍稀时间年龄计算器下载v1.5 安卓版-西西软件下载...
  12. 如何把多个文件夹里的文件提取出来?
  13. 中国城市乞丐的五大经典表情
  14. 【Unity】基于顶点色的海边波浪效果(适用移动端)
  15. 清算中的二清是什么东东
  16. FLIP:Scaling Language-Image Pre-training via Masking
  17. Windows8 最新泄漏版试用体验与下载
  18. html在一行内横向排列并排同行同时显示两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
  19. 用指定的用户名和密码无法登录到该FTP服务器
  20. 计算机未来规划范文200,计算机职业规划书范文

热门文章

  1. Springboot的Mybatis拦截器实现
  2. 【图像融合】可见光与红外图像融合方法和评价指标
  3. 什么是黑盒测试,和白盒测试的区别有哪些?
  4. PDF电子书制作详细教程
  5. Post 请求调试工具简介
  6. 74LS系列芯片简记——20-30
  7. linux实现共享文件夹功能
  8. 怎么做好客户关系管理培训PPT课件?
  9. 毕业设计别再做 XX 管理系统了!!!
  10. java开源打印控件_这个WEB打印控件略牛逼,还免费