还是废话不多说,直接上代码
# 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)