python解析ip范围,拆分为所有ip数组

代码如下,还需结合一篇文章来看:ip范围格式转换

python 复制代码
#! -*- coding:utf-8 -*
"""
@desc: 解析ip范围为单ip列表
"""

import ipaddress


def ip_range_to_list(start_ip, end_ip):
    """
    处理有明确起始ip的数据(其他类型的,可将数据转换为这种格式再使用)
    格式如下:
    192.168.0.1-192.168.255.10
    # 下面的拆分转换方法,见上一篇文章
    192.168.*.1
    192.168-169.*.*
    10.1.1.1-10
    :param start_ip:
    :param end_ip:
    :return:
    """
    # 创建起始和结束IP地址对象
    start_ip_obj = ipaddress.IPv4Address(start_ip)
    end_ip_obj = ipaddress.IPv4Address(end_ip)

    # 初始化一个空列表来存储所有的IP地址
    ip_list = []

    # 遍历范围内的所有IP地址
    current_ip = start_ip_obj
    while current_ip <= end_ip_obj:
        ip_list.append(str(current_ip))
        current_ip += 1  # 递增一个IP地址

    return ip_list


def generate_ip_list_from_cidr(cidr):
    """
    处理带掩码的数据
    192.168.1.0/24
    :param cidr:
    :return:
    """
    # 解析CIDR,得到一个IPv4Network对象,使用strict=False来允许非网络地址的IP
    network = ipaddress.IPv4Network(cidr, strict=False)

    # 计算可用的主机地址范围,network.hosts()会返回一个生成器
    ip_list = []
    for host in network.hosts():
        ip_list.append(host)

    return ip_list


if __name__ == '__main__':
    # 示例使用
    start_ip = "192.168.0.1"
    end_ip = "192.168.255.10"
    ip_list = ip_range_to_list(start_ip, end_ip)
    # 打印结果
    print(len(ip_list))


    # 定义CIDR表示的子网
    cidr = "192.168.1.0/23"
    # 调用函数并打印结果
    ip_addresses = generate_ip_list_from_cidr(cidr)
    print(len(ip_addresses))
相关推荐
hongjianMa4 分钟前
【论文阅读】Hypercomplex Prompt-aware Multimodal Recommendation
论文阅读·python·深度学习·机器学习·prompt·推荐系统
Elnaij23 分钟前
从C++开始的编程生活(12)——vector简单介绍和迭代器
开发语言·c++
饼干,1 小时前
第23天python内容
开发语言·python
数学难1 小时前
Java面试题2:Java线程池原理
java·开发语言
咸鱼求放生1 小时前
Java 8 Stream API
java·开发语言
盒马盒马1 小时前
Rust:Trait 抽象接口 & 特征约束
开发语言·rust
天使街23号1 小时前
go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
开发语言·后端·golang
酷柚易汛智推官1 小时前
基于librespot的定制化Spotify客户端开发:开源替代方案的技术实践与优化
python·开源·酷柚易汛
雪碧聊技术1 小时前
requests入门
python·requests·请求头的user-agent
ThreeYear_s2 小时前
【FPGA+DSP系列】——MATLAB simulink仿真三相桥式全控整流电路
开发语言·matlab·fpga开发