python解析ip范围,判断ip是否在ip范围内
目录
1. 背景
2. 代码使用示例
2.1 分割ip,横杠 (-) 的ip范围
2.2 判断ip在掩码(/)的范围内
2.3 判断ip在横杠(-)的范围内
2.3.1 格式:192.168.1.1-192.168.1.10
2.3.2 格式:192.168.1.1-10
2.3.3 格式 192.168-169.*.*
2.3.4 格式192.168.*.*或192.*.168.*等
3. 其他扩展
3.1 校验是否为ipv4/ipv6
3.2 判断一个网段/前缀是另一个的子网
1. 背景
各种各样的ip范围,ip通配符等等,判断ip是否符合在这些范围内,搜索耗时耗力,整理出来,后续使用直接复制,有更好用的备注留言
2. 代码使用示例
2.1 分割ip,横杠 (-) 的ip范围
#! -*- coding:utf-8 -*def split_ip_range(range):"""处理以下格式分割192.168.1.1-10 拆分成192.168.1.1-192.168.1.10192.168.1-10.* 拆分成192.168.1.*-192.168.10.*192.168-169.*.* 拆分成192.168.*.*-192.169.*.*192-193.168.*.* 拆分成192.168.*.*-193.168.*.*192.168.1.1-10 拆分成192.168.1.1-192.168.1.10192.168.1.1-192.168.1.10 拆分成192.168.1.1-192.168.1.10:param range::return:"""if "-" not in range:raise ValueError("处理不了其他格式的,拜拜")start, end = range.split("-")start_list, end_list = start.split("."), end.split(".")start_lenght = len(start_list)end_lenght = len(end_list)# 暂不简化,逻辑简洁if start_lenght == 1 and end_lenght == 4:ret_start = start_list + end_list[1:]ret_end = end_listelif start_lenght == 2 and end_lenght == 3:ret_start = start_list + end_list[1:]ret_end = start_list[:1] + end_listelif start_lenght == 3 and end_lenght == 2:ret_start = start_list + end_list[1:]ret_end = start_list[:2] + end_listelif start_lenght == 4 and end_lenght == 1:ret_start = start_list + end_list[1:]ret_end = start_list[:3] + end_listelif start_lenght == 4 and end_lenght == 4:ret_start = start_listret_end = end_listelse:raise ValueError("处理不了其他格式的,再见")return ",".join(ret_start), ",".join(ret_end)if __name__ == '__main__':# 测试ranges = ["192-193.168.*.*","192.168-169.*.*","192.168.1-10.*","192.168.1.1-10","192.168.1.1-192.168.1.10"]for v in ranges:print(f"{v},拆分后是:{split_ip_range(v)}")
2.2 判断ip在掩码(/)的范围内
import ipaddressdef is_ip_in_cidr(ip, cidr):"""判断一个IP地址是否在一个CIDR掩码范围内。:param ip: 字符串格式的IP地址:param cidr: CIDR格式的网络地址(如 "192.168.1.0/24"):return: 如果IP地址在CIDR范围内返回True,否则返回False"""try:# 创建一个IP地址对象ip_obj = ipaddress.ip_address(ip)# 创建一个网络对象network = ipaddress.ip_network(cidr, strict=False)# 检查IP地址是否在网络范围内return ip_obj in networkexcept ValueError as e:print(f"Error parsing IP or CIDR: {e}")return False# 测试用例
test_cases = [("192.168.1.5", "192.168.1.0/24"),("192.168.1.254", "192.168.1.0/24"),("192.168.2.1", "192.168.1.0/24"),("192.168.1.10", "192.168.1.8/29"),("192.168.1.12", "192.168.1.8/29")
]for ip, cidr in test_cases:print(f"{ip} 是否在 {cidr} 范围内?{is_ip_in_cidr(ip, cidr)}")
2.3 判断ip在横杠(-)的范围内
2.3.1 格式:192.168.1.1-192.168.1.10
支持ipv4, ipv6网段
import ipaddress# 支持ipv4, ipv6
def is_ip_in_range(ip_range_str, ip_address_str):"""判断一个IP地址是否在一个IP段内。参数:ip_range_str (str): IP段,格式为"start_ip-end_ip"。ip_address_str (str): 要检查的IP地址。返回:bool: 如果IP地址在IP段内,返回True;否则返回False。"""try:# 将IP范围字符串拆分为起始IP和结束IPstart_ip, end_ip = ip_range_str.split('-')# 将起始IP和结束IP以及要检查的IP地址转换为IP地址对象start_ip_address = ipaddress.ip_address(start_ip)end_ip_address = ipaddress.ip_address(end_ip)ip_to_check = ipaddress.ip_address(ip_address_str)# 判断IP地址是否在起始IP和结束IP之间return start_ip_address <= ip_to_check <= end_ip_addressexcept Exception as e:# print(f"Error: {e}")return False
2.3.2 格式:192.168.1.1-10
1. 使用2.1的方法分割
2. 使用2.3.1的方法判断
2.3.3 格式 192.168-169.*.*
包含*号的
1. 使用2.1的方法分割
2. 分割后的起始ip,* 做转换
3. 使用2.3.1方法判断
# 开始ip的*换为0
# 结束ip的*换为255ip_range_str = '192.*.1.1-192.*.10.1' # 2.1方法返回ip_range_str = '192.0.1.1-192.255.10.1' # 修改
ip_str = '192.168.10.1'
print(is_ip_in_range(ip_range_str, ip_str))
2.3.4 格式192.168.*.*或192.*.168.*等
1. 先如下处理数据
2. 再调用2.3.1方法
ip = "192.168.*.*"start = ip.replace("*", "0")
end = ip.replace("*", "255")
print(f"{start}-{end}") # 192.0.0.1-192.255.255.1
3. 其他扩展
3.1 校验是否为ipv4/ipv6
import ipaddressdef validate_ip(ip_address: str):"""校验是否为ipv4或ipv6@param ip_address: ip@return:"""try:ipaddress.ip_address(ip_address)return Trueexcept ValueError:return False
3.2 判断一个网段/前缀是另一个的子网
import ipaddressdef is_subnet_of(a, b):"""Returns True if network a is a subnet of network b.网络a是网络b的子网,返回true@param a: 子网@param b: 父网@return: bool"""try:# 将前缀转换为IP网络对象a_network = ipaddress.ip_network(a, strict=True)b_network = ipaddress.ip_network(b, strict=True)return (a_network.network_address >= b_network.network_address anda_network.broadcast_address <= b_network.broadcast_address)except Exception as e:print(e)return False
相关文章:
python解析ip范围,判断ip是否在ip范围内
目录 1. 背景 2. 代码使用示例 2.1 分割ip,横杠 (-) 的ip范围 2.2 判断ip在掩码(/)的范围内 2.3 判断ip在横杠(-)的范围内 2.3.1 格式:192.168.1.1-192.168.1.10 2.3.2 格式&…...
Springboot错误日志切面,找到post请求体被消费后的数据
问题记录:测试环境接口报错,日志里没有请求参数等信息,于是写了一个切面,但切面中获取不到 request的请求体,因为 post 请求体只能被消费一次,于是找解决办法 解决方法 既然 request 被消费了导致对应的请…...
【二十】【QT开发应用】listwidget右键菜单和删除item
创建项目,添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件,选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…...
LabVIEW机动车动态制动性能校准系统
机动车动态制动性能测试系统通过高精度的硬件设备与LabVIEW软件的紧密配合,实现了对机动车制动性能的精确校准与评估。系统不仅提高了测试的精确性和效率,而且具备良好的用户交互界面,使得操作更加简便、直观。 项目背景 随着机动车辆数量的…...
Linux(CentOS8)服务器安装RabbitMQ
我安装了很久都没有成功, 各种问题, 每次的异常都不一样, 现将成功安装过程做个总结 安装前工作 确保已经安装了一些基础工具和组件库 下载安装包 https://www.erlang.org/patches/otp-24.3.4.5 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.15/ra…...
R语言进行无序多分类Logistic回归
在临床研究中,接触最多的是二分类数据,如淋巴癌是否转移,是否死亡,这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程,可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据…...
Maven从入门到精通(三)
一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件,包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别: 全局 settings.xml 是 maven 的全局配置文件,一般位于 ${maven.home}/conf…...
Red Hat 和 Debian Linux 对比
原图的作者(https://bbs.deepin.org/post/209759) Red Hat Enterprise Linux https://www.redhat.com/ CentOS Linux https://www.centos.org/ Fedora Linux https://fedoraproject.org/ Debian https://www.debian.org/ Ubuntu https://cn.ubuntu.com/ https://ubuntu.c…...
Axure设计之全屏与退出全屏交互实现
在Axure RP中,设计全屏与退出全屏的交互功能可以极大地提升用户体验,尤其是在展示产品原型或进行演示时。本文将详细介绍如何在Axure RP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。 Axure原型设计web端交互元件库:https://…...
如何测试出自己电脑的网络速度(网速)?
首先电脑上要下载一个这样的一个电脑软件:360安全卫士 1、打开软件之后,选择【网络安全】 2、选择【宽带测速器】 3、点击之后,即可开始检测当前网络速度,等待大概十几秒后会出现结果,如下: 位置①:显示…...
如何利用AI进行有效的科技产品发布
如果你们公司即将推出一款具有颠覆性的软件,你大概已经了解了科技在现代市场中的价值。 但像AI这样的技术不仅仅是有效的产品组成部分,它们还可以帮助将这些产品推向客户(或安装到他们的电脑上)。 Kuno Creative明白AI在科技营销…...
二层、三层网络基本原理
文章目录 二层网络整体拓扑相关配置配置namespace创建switch创建veth设备配置veth的IP启动veth 测试 三层网络配置vm1配置vm2配置 测试 二层网络 我们用Linux bridge模拟现实中的switch,用namespace模拟连接在交换机上的pc 整体拓扑 ------------------ ----…...
全面掌握 Jest:从零开始的测试指南(上篇)
随着JavaScript在前后端开发中的广泛应用,测试已成为保证代码质量的关键环节。 为什么需要单元测试 在我们的开发过程中,经常需要定义一些算法函数,例如将接口返回的数据转换成UI组件所需的格式。为了校验这些算法函数的健壮性,部…...
Go 交叉编译
Mac 下编译 Linux 和 Windows 64位可执行程序 Linux: CGO_ENABLED0 GOOSlinux GOARCHamd64 go build main.go Windows: CGO_ENABLED0 GOOSwindows GOARCHamd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 Mac: CGO_ENABLED0 G…...
goctl安装失败
今天遇到一个很奇怪的问题 在阿里云的ubuntu服务器上远程安装goctl:go install github.com/zeromicro/go-zero/tools/goctllatest,后面会断开ssh连接,就再也连不上了,connecting with ssh timed out。在阿里云的workbench上连接显…...
DebateGPT:通过多智能体辩论监督微调大模型
人工智能咨询培训老师叶梓 转载标明出处 这些模型的训练通常依赖于资源密集型的人工反馈,这不仅成本高昂,而且耗时。为了解决这一问题,一篇名为《FINE-TUNING LARGE LANGUAGE MODELS WITH MULTI-AGENT DEBATE SUPERVISION》的论文提出了一种…...
【最新综述】基于深度学习的超声自动无损检测(下)
4.Levels of automation 5.Basic axioms for DL-based ultrasonic NDE 在回顾了最新技术和每个自动化级别的贡献之后,我们不难发现,目前的数字语言方法论在不同论文之间存在着很大的差异。例如,有些作者提出了同时处理不同步骤的模型[121]&…...
kali——tshark的使用
目录 前言 使用方法 tshark提取流量为文档 前言 tshark 是一个命令行的网络分析工具,它用于捕获和分析网络流量。它支持多种网络协议,包括 TCP、UDP、ICMP 等。Tshark 可以用于调试网络问题、进行安全审计、分析应用程序性能等。 在 Kali Linux 中&…...
TortoiseSVN图标不显示的解决
解决办法一:修改svn软件的图标设置 1、选中一个文件夹或在桌面空白处,右击进入svn的setting 2、进入setting->Icon Overlays,Status cache选择Default或shell,然后点击应用 3、查看文件,图标可以正常显示 解决办法二:修改注册表的文件夹顺序 问题现象: 1、svn一直…...
Oracle 11gR2打PSU补丁详细教程
1 说明 Oracle的PSU(Patch Set Update)补丁是Oracle公司为了其数据库产品定期发布的更新包,通常每季度发布一次。PSU包含了该季度内收集的一系列安全更新(CPU:Critical Patch Update)以及一些重要的错误修…...
从‘localhost:8080’到‘dev.myapp.com’:给本地服务绑个‘正经’域名的三种方法(Nginx/Docker/系统Hosts)
从‘localhost:8080’到‘dev.myapp.com’:本地服务域名绑定的实战指南 每次调试前端页面时,在浏览器地址栏反复输入localhost:3000或127.0.0.1:8080,这种体验总让人感觉像是在用临时解决方案应付正式开发需求。想象一下,当你的团…...
如何利用系统提示词革新开源项目的AI功能实现
如何利用系统提示词革新开源项目的AI功能实现 【免费下载链接】system_prompts_leaks 项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks 在人工智能技术快速发展的今天,系统提示词已成为解锁AI潜能的关键钥匙。对于开源项目而言&…...
Umi-OCR深度指南:离线OCR技术的架构解析与全场景实战
Umi-OCR深度指南:离线OCR技术的架构解析与全场景实战 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件,适用于Windows系统,支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHu…...
手动侧开门款屏蔽箱 适用蓝牙 WIFI测试 无线测试屏蔽箱GX-5950A
GX-5950A屏蔽箱品名:屏蔽箱型号:GX-5950A一、主要功能及适用范围:1 该屏蔽箱适用于无线通讯测试、1 EMI测试、1 耦合测试、1 RF功能测试。适用于手机,平板计算机,蓝牙,wi-fi,天线等测试&#…...
告别混乱标注!手把手教你定制LabelImg的标注框颜色与样式(附打包exe完整流程)
视觉标注效率革命:LabelImg高级定制与团队部署实战指南 在计算机视觉项目的标注环节中,混乱的视觉呈现往往成为效率瓶颈。当标注员面对数百张包含"车辆"、"行人"、"交通标志"等多类别的图像时,系统随机分配的标…...
Altium Designer新手必看:5分钟搞定PCB封装库创建(附3D模型导入技巧)
Altium Designer新手实战:从零构建PCB封装库与3D模型高效导入 刚接触Altium Designer的工程师常被PCB封装库的创建难住——焊盘尺寸怎么定?丝印如何对齐?3D模型能否可视化验证?这些问题直接关系到后期PCB设计的成功率。本文将用最…...
SDXL 1.0绘图工坊环境部署:Ubuntu+conda+4090驱动适配完整流程
SDXL 1.0绘图工坊环境部署:Ubuntuconda4090驱动适配完整流程 1. 环境准备与系统要求 在开始部署SDXL 1.0绘图工坊之前,需要确保你的硬件和软件环境满足以下要求: 硬件要求: 显卡:NVIDIA RTX 4090(24GB显…...
告别SSH断连焦虑:用Tmux会话持久化拯救你的远程工作
远程开发者的救星:Tmux实战指南与高阶会话管理技巧 凌晨三点,服务器上的关键编译任务刚执行到一半,突然网络抖动导致SSH连接中断——这种令人抓狂的场景,每一位远程开发者都深有体会。传统终端会话的脆弱性让我们不得不反复重做工…...
OpenClaw隐私增强:nanobot本地模型处理敏感财务数据
OpenClaw隐私增强:nanobot本地模型处理敏感财务数据 1. 为什么选择本地模型处理财务数据 去年我在帮朋友的小公司整理年度财报时,遇到了一个棘手的问题:他们使用的在线财务分析工具要求上传完整的Excel报表到云端服务器。虽然服务商承诺数据…...
Kronos金融市场基础模型:从技术原理到量化交易系统构建
Kronos金融市场基础模型:从技术原理到量化交易系统构建 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 金融市场的复杂性和波动性一直是投资者…...
