Python自动化:Excel根据IP匹配网段获取所属源端口

news2024/9/25 1:21:25

需求

现在有两个文件:
1. 【NTP.xlsx】:有name、IP、fenzhihang、vendor、source这五列
在这里插入图片描述
2. 【IP.xlsx】:有daqu、fenzhihang、duankou、IP、mask、gateway、subnet、yongtu、miaoshu这九列
在这里插入图片描述

现在更新基线,每台设备都需要增加ntp source-interface xxx
需要填写NTP.xlsx的source列,它的值应该是IP.xlsx的duankou的值。

解析

难点:

  1. 由于环境特殊,不允许自行添加python库,因此我的环境是spyder5.5,python3.8这样一个环境。
  2. 同时,由于每台设备的IP并非是网段的网关,因此无法直接使用excel的vlookup函数。
  3. 代码能力偏弱,很难实现。

分析:

  1. 分析发现,应该可以根据subnet列的,计算得到所有属于整个网段的主机地址
  2. 通过匹配NTP.xlsx的IP与IP.xlsx的subnet计算而来的网段范围,可以确认到对应的网段,然后将IP.xlsx的duankou列填写到NTP.xlsx的source列中

提示词

由于代码能力弱,因此对需求分析后,进行提示词编写,交由ChatGPT-4o编写,最终效果实现了需求

现在有两个文件:

  1. 【NTP.xlsx】:有name、IP、fenzhihang、vendor、source这五列
  2. 【IP.xlsx】:有daqu、fenzhihang、duankou、IP、mask、gateway、subnet、yongtu、miaoshu这九列

现在我的编译环境是spyder5.5,python3.8,没有办法增加额外的库,请为我编写python代码实现我的需求:

  1. 仅读取【NTP.xlsx】的IP和source列即可,source列是需要填写数据的列。
  2. 读取【IP.xlsx】的duankou、subnet列,这两列是用于填写【NTP.xlsx】的数据参考。
  3. 编写一个函数,处理【IP.xlsx】的subnet列,这一列的数据是x.x.x.x/x的形式,你需要读取/,然后以IP地址段的处理方式,返回属于这个IP地址段的所有地址。例如10.170.131.64/26,你需要返回属于这个地址段范围的所有主机地址10.170.131.65 至 10.170.131.126
  4. 【NTP.xlsx】的IP的值,去匹配上一步获取到的地址范围,当匹配到这个IP属于某个地址段后,返回【IP.xlsx】中对应的duankou的值并填入【NTP.xlsx】的IP对应的source列中。例如有一个IP是10.170.131.71,它匹配了10.170.131.64/26这个网段,返回对应的duankou列的值为Vlan100

代码

由于没有办法添加库,所以无法使用ipaddress这个python库直接计算网段
通过ChatGPT-4o,进行代码编写,实现了替换这个ipaddress库的依赖

from openpyxl import load_workbook

def ip_to_int(ip):
    """
    将IP地址转换为整数。
    """
    return sum([int(num) << (8 * i) for i, num in enumerate(reversed(ip.split('.')))])

def int_to_ip(ip_int):
    """
    将整数转换为IP地址。
    """
    return '.'.join([str((ip_int >> (8 * i)) & 0xFF) for i in range(4)][::-1])

def expand_subnet(subnet):
    """
    根据子网返回所有主机地址(排除网络地址和广播地址)。
    """
    if subnet is None:
        return []
    
    ip, cidr = subnet.split('/')
    cidr = int(cidr)
    
    # 将IP转换为整数
    ip_int = ip_to_int(ip)
    
    # 计算子网掩码
    mask = (1 << 32) - (1 << (32 - cidr))
    
    # 计算网络地址和广播地址
    network_int = ip_int & mask
    broadcast_int = network_int | (~mask & 0xFFFFFFFF)
    
    # 生成网络地址范围内的所有主机地址(排除网络地址和广播地址)
    return [int_to_ip(i) for i in range(network_int + 1, broadcast_int)]

def fill_ntp_source(ntp_file, ip_file):
    # 加载Excel文件
    ntp_wb = load_workbook(ntp_file)
    ip_wb = load_workbook(ip_file)
    
    # 读取相应的工作表
    ntp_ws = ntp_wb.active
    ip_ws = ip_wb.active
    
    # 创建一个用于存储subnet对应duankou的字典
    subnet_dict = {}

    # 遍历IP.xlsx的每一行,读取subnet和duankou列,并生成IP地址列表
    for row in ip_ws.iter_rows(min_row=2, values_only=True):
        duankou = row[2]  # duankou在第3列
        subnet = row[6]   # subnet在第7列
        if subnet:  # 确保subnet不为空
            all_hosts = expand_subnet(subnet)
            for ip in all_hosts:
                subnet_dict[ip] = duankou
    
    # 遍历NTP.xlsx的每一行,读取IP列,匹配subnet_dict中的IP,填充source列
    for row in ntp_ws.iter_rows(min_row=2):
        ip = row[1].value  # IP在第2列
        if ip in subnet_dict:
            row[4].value = subnet_dict[ip]  # source在第5列
    
    # 保存修改后的NTP.xlsx
    ntp_wb.save(ntp_file)

# 使用方法
fill_ntp_source("NTP.xlsx", "IP.xlsx")


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ET6框架(二)Demo工程的运行及编译

1.工程下载地下&#xff1a; GitHub - egametang/ET at release6.0 2.复制地址后下载&#xff0c;在本人使用时ET已更新到最新9.0的版本&#xff0c;因此下载后需要切换分支到6.0版本 3.下载完工程后可以用 UnityHub打开工程&#xff0c;如没有对应版本可以在&#xff1a;h…

OpenHarmony技术开发:Launcher架构应用启动流程分析

简介 Launcher 作为系统人机交互的首要入口&#xff0c;提供应用图标的显示、点击启动、卸载应用&#xff0c;并提供桌面布局设置以及最近任务管理等功能。 Launcher 采用 扩展的 TS 语言&#xff08;eTS&#xff09;开发&#xff0c;主要的结构如下&#xff1a; product 业务…

安卓13 背光调节非线性问题处理,调节范围不正常问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码修改 4.彩蛋 1.前言 我们看看现在的版本的亮度图 2.问题分析 当背光亮度设置为0%时,每次按下亮度增加键或者 input keyevent BRIGHTNESS_UP,亮度UI的增幅较大,首次按下后亮度平滑提升至大约55%,随后继…

路旁树木种类巡检检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

路旁树木种类巡检检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着城市化进程的加快&#xff0c;城市绿化…

七、面向对象编程(中级)

文章目录 一、IDEA1.1 IDEA下载安装1.2 IDEA的使用1.3 IDEA常用的快捷键 二、包2.1 包的基本介绍2.2 包的本质分析2.3 包的命名2.4 常用的包2.5 如何引入包 三、访问修饰符四、面向对象的三大特征4.1 封装4.2 继承4.2.1 为什么需要继承4.2.2 继承的基本介绍4.2.3 继承的深入讨论…

【C++题解】1222. 经典递归问题——汉诺塔

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1222. 经典递归问题——汉诺塔 类型&#xff1a;递归、函数 题目描述&#xff1a; 汉诺塔&#xff08;又称河内塔&#xff09;问题是印度的一个古老的传说。开天辟地的神勃拉玛在一…

关于武汉芯景科技有限公司的MCU监控芯片XJ809S开发指南(兼容MAX809S)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、功能 当电源电压低于预设阈值时&#xff0c;芯片会发出复位信号&#xff0c;将微处理器或系统重置到初始状态&#xff0c;防止因电源问题导致的系统错误运行。复位信号在电源电压恢复并稳定后至少保持140ms&#xff0c;确保系统有…

HikariCP源码分析之源码环境搭建

一、fork源码库 为了方便记录以及查看一些历史的提交信息&#xff0c;我先在github上fork了这个源码库。 他的原始源码库位置为HikariCP源码位置 在fork到我的源码库之后&#xff0c;我就可以用git clone拉取下来&#xff0c;然后在我本地打开&#xff0c;做一些修改和笔记。然…

点云上采样

【版权声明】本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 参考书籍&#xff1a;《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章&#xff0c;专栏介绍地址“【python三维深度学习】python…

mysql regexp匹配多个字符串

项目场景&#xff1a; 数据结构 其中nameArr存储的是名字集合&#xff0c;现在的需求是传入"aaa","fff"&#xff0c;需要把包含这两个name的数据都查出来。 解决方案&#xff1a; 可以使用REGEXP来匹配包含多个特定ID的字符串。使用以下正则表达式&#x…

Linux1-初识Linux

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件所组成。 硬件&#xff1a;计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和…

复习Vue笔记(给自己做笔记)

基于脚手架创建前端工程 环境要求 node.js&#xff1a;前端项目的运行环境&#xff08;相当于Java的运行环境JDK&#xff09; npm&#xff1a;JS的包管理工具/器 Vue CLI&#xff1a;基于Vue进行快速开发的完整系统&#xff0c;实现交互式的项目脚手架 创建Vue基础项目代码&a…

从入门到专业,2024年精选录屏工具一网打尽

电脑录屏随着科技的飞速发展和数字化生活的普及已经成为了我们学习、日常工作、娱乐中不可或缺的一部分。本文将带你一起探索和班迪录屏一样大火的电脑录屏工具有哪些。 1.福昕REC大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款软件体积小巧精致&#xff0c;不需要多…

【第81课】开发框架安全SpringBootStruts2LaravelThinkPHPCVE复现

免责声明 本文发布的工具和脚本&#xff0c;仅用作测试和学习研究&#xff0c;禁止用于商业用途&#xff0c;不能保证其合法性&#xff0c;准确性&#xff0c;完整性和有效性&#xff0c;请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利&#xff0…

Golang | Leetcode Golang题解之第376摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

【JVM】剖析字符串与数组的底层实现(二)

剖析字符串与数组的底层实现 字符串jdk8和jdk9的区别 jdk8:底层是一个char[]数组 jdk9及之后:底层是一个byte[]数组 一个中文占两个字节&#xff0c;一个char占两个字节&#xff0c;一个byte占一个字节 Jdk9及之后的版本中&#xff0c;多了一个code属性&#xff0c;这个属性标…

深入掌握Kubernetes核心:YAML配置详解与实战

Kubernetes 的yaml配置文件 Kubernetes 的 YAML 配置文件是定义和管理集群中的所有资源的关键工具。了解如何编写和使用这些配置文件对管理 Kubernetes 集群至关重要。 1. 基础结构 Kubernetes YAML 配置文件通常由以下几个部分组成&#xff1a; apiVersion: 资源使用的 API …

公司同时使用目标(OKR)(KPI)的用例是什么?

简单的答案&#xff1a;所有使用OKR的公司都使用KPI。 长答案&#xff1a; 在公司层面&#xff0c;大多数OKR与关键绩效指标直接挂钩。举例说明&#xff0c;假设一家公司的目标是&#xff1a;”实现财务目标”&#xff0c;有以下3个关键结果。 1-第二季度公司收入翻番&#…

BeanFactoryPostProcessor 和 BeanPostProcessor

BeanFactoryPostProcessor 和 BeanPostProcessor 基本概念BeanFactoryPostProcessor简单实践BeanFactoryPostProcessor 典型应用BeanFactoryPostProcessor 和 BeanDefinitionRegistryPostProcessor BeanPostProcessor简单实践AOP 简单实践 基本概念 BeanFactoryPostProcessor …

百度翻译与TOP3在线翻译伙伴:2024年的黄金组合

在这个信息丰富的时代&#xff0c;语言帮助人们跨越地域界限进行交流。随着全球化的发展&#xff0c;高效的在线翻译工具变得越来越重要&#xff0c;它能帮我们更好地了解世界和不同的文化。今天&#xff0c;我们就来看看百度翻译和它的三个新对手之间的比较&#xff0c;一起找…