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)以及一些重要的错误修…...
Unity Il2CppDumper原理与实战:解析元数据与二进制对齐
1. 这不是“破解工具”,而是Unity开发者该懂的二进制真相课 你刚在Unity Asset Store下载了一个功能惊艳的插件,却在打包iOS后发现部分逻辑失效;或者接手一个没有源码的旧项目,只有一堆 .dll 和 .so 文件,连主入口…...
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤在当今数据驱动的时代,对象存储已成为现代应用架构中不可或缺的一部分。MinIO作为高性能、兼容S3协议的开源对象存储解决方案,凭借其轻量级和易用性赢得了众多…...
top50 BF16算力(TFLOPS) 显卡排行榜 天梯图
排名显卡型号BF16算力(TFLOPS)售价(元)单TFLOPS价格(元)1B200(SXM)45002200000488.892H200(SXM)19801200000606.063MI300X1307750000573.834H100 SXM519501100000564.105RTX PRO 6000 Blackwell1150780000678.266H100 PCIe 80GB1560850000544.877RTX 50906803400050.008A100 80…...
AArch64内存管理:MAIR_EL3寄存器详解与应用
1. AArch64内存管理基础与MAIR_EL3寄存器定位 在Armv8-A/v9-A架构中,内存管理单元(MMU)通过多级页表实现虚拟地址到物理地址的转换。当处理器执行内存访问时,MMU会遍历页表条目(Translation Table Entry),其中包含两个关键信息:目…...
ThinkPad开机报错0183/0253?别慌,手把手教你搞定EFI变量错误(附BIOS重置教程)
ThinkPad开机报错0183/0253?EFI变量错误全面解决方案当你按下ThinkPad的电源键,期待熟悉的开机画面时,屏幕上却突然跳出一串神秘代码——"0183: Bad CRC of Security Settings in EFI Variable"或"0253: EFI Variable Block D…...
2026 西安 AI 问答曝光搭建技术解析:GEO 知识图谱 + 深度测评
随着大语言模型技术的快速普及,AI 搜索已经成为用户获取企业信息、商家服务的核心入口。根据中国互联网信息中心 2026 年发布的《中国人工智能搜索发展报告》显示,2025 年国内 AI 搜索用户规模突破 8.2 亿,日均搜索请求超过 20 亿次ÿ…...
PlayAI语音合成质量到底如何?12款竞品横向对比+5项MOS/LSD/STOI硬指标揭榜
更多请点击: https://kaifayun.com 第一章:PlayAI语音合成质量评测报告 PlayAI 是一款面向开发者与内容创作者的实时语音合成(TTS)服务,支持多语种、多音色及情感可控输出。本报告基于客观可复现的评测流程࿰…...
基于ESP32与MQTT的家庭环境监测系统:从传感器选型到数据可视化实战
1. 项目概述与核心价值最近几年,我身边越来越多的朋友开始关注家里的空气质量、温湿度这些看不见摸不着,但又实实在在影响生活舒适度和健康的环境指标。从新装修的房子担心甲醛,到有老人小孩的家庭在意PM2.5和二氧化碳浓度,再到南…...
告别元素变动导致的报错:探索自动化测试脚本的 AI“自愈”能力
前言:一个所有测试人都经历过的噩梦 周三晚上十一点,CI/CD流水线再次亮起红灯。 你打开日志,满屏的NoSuchElementException扑面而来。仔细一看——前端团队在昨天的版本中重构了登录页面的DOM结构,原本的#login-btn变成了#signin-button-v2,30个测试用例因此全军覆没。 …...
基于ESP8266与MQTT的家庭水压自动控制系统设计与实现
1. 项目概述与核心需求解析家里水压不稳、供水时断时续,这大概是很多朋友都遇到过的烦心事。我所在的城市供水情况就很不理想,为了解决这个问题,我不得不自己动手,搭建了一套基于ESP8266微控制器的家庭水压增压与储水自动控制系统…...
