python3使用ipaddress模块实现批量ipv4/ipv6地址生成

本文介绍了使用Python编写的脚本,可以顺序或随机生成指定范围、数量的IPv4和IPv6地址,通过函数装饰器实现文件名输出。
摘要由CSDN通过智能技术生成

还是废话不多说,直接上代码

# coding:utf-8
import ipaddress
from random import randint


def print_filename(func):
    def testwrapper(*args, **kwargs):
        func(*args, **kwargs)
        print("生成完毕,文件名:ipaddress.txt")

    return testwrapper


@print_filename
def generate_ip_addresses_range(start_ip, end_ip):
    start_address = int(ipaddress.ip_address(start_ip))
    end_address = int(ipaddress.ip_address(end_ip))
    if end_address < start_address:
        raise ValueError(f"结果地址:{end_ip}小于起始地址:{start_ip}!")
    with open("ipaddress.txt", "w") as f:
        for ip_num in range(start_address, end_address + 1):
            f.write(str(ipaddress.ip_address(ip_num)) + "\n")
            f.flush()


@print_filename
def generate_ip_addresses_num(start_ip, num):
    start_address = int(ipaddress.ip_address(start_ip))
    with open("ipaddress.txt", "w") as f:
        for ip_num in range(start_address, start_address + num):
            f.write(str(ipaddress.ip_address(ip_num)) + "\n")
            f.flush()


@print_filename
def generate_ip_addresses_random(start_ip, end_ip, num):
    start_address = int(ipaddress.ip_address(start_ip))
    end_address = int(ipaddress.ip_address(end_ip))
    if end_address < start_address:
        raise ValueError(f"结束地址:{end_ip} 小于起始地址:{start_ip}!")
    with open("ipaddress.txt", "w") as f:
        for x in range(num):
            ip_num = randint(start_address, end_address)
            f.write(str(ipaddress.ip_address(ip_num)) + "\n")
            f.flush()

start_str = """
1、顺序生成指定范围内ipv4/ipv6地址
2、顺序生成从指定IP开始的指定数量ipv4/ipv6地址
3、指定范围内随机生成指定数量的ipv4/ipv6地址
4、随机生成指定数量的ipv4地址
5、随机生成指定数量的ipv6地址
"""

def main(start_str):
    while True:
        try:
            print(start_str)
            num = input("请输入选择【1-5】:")
            match num:
                case "1":
                    start_ip = input("请输入起始地址:")
                    end_ip = input("请输入结束地址:")
                    generate_ip_addresses_range(start_ip, end_ip)
                case "2":
                    start_ip = input("请输入起始IP:")
                    num = input("请输入生成地址的数量:")
                    generate_ip_addresses_num(start_ip, int(num))
                case "3":
                    start_ip = input("请输入起始地址:")
                    end_ip = input("请输入结束地址:")
                    num = input("请输入生成地址的数量:")
                    generate_ip_addresses_random(start_ip, end_ip, int(num))
                case "4":
                    num = input("请输入生成ipv4地址的数量:")
                    generate_ip_addresses_random("1.0.0.0", "255.255.255.255", int(num))
                case "5":
                    num = input("请输入生成ipv6地址的数量:")
                    generate_ip_addresses_random("1::0", "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", int(num))
                case _:
                    print("输入有误,请重新输入!")
        except ValueError as e:
            print(e)
        except Exception as e:
            print(e)


if __name__ == "__main__":
    main(start_str)

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值