###本人从事互联网IDC行业,主要业务对接IDC大带宽,目前主流交换机多数为10G端口和100G端口,当大带宽使用10G端口时,就需要大量端口,同时也需要大量互联ip,比如200G大带宽,交付给客户就需要20个10G端口,目前IDC互联一般均需要ipv4和ipv6互联地址,当需要大量互联地址时,手动分配就显得繁琐,所以自制了一个python小程序,便于分配ipv4 /30掩码 和ipv6 /127 掩码的互联地址###
环境:windows11(均需要安装好python环境)
###在C盘——用户——你的账号名称目录下创建下面文件
ipv4.py 文件代码:
def generate_interconnect_address():
# 获取网络地址和互联地址对数
network_address = input("请输入网络地址(例如 192.168.1.0/24):")
num_pairs = int(input("请输入互联地址对数:"))
# 将字符串形式的网络地址转换为 IP 地址和子网掩码的元组
network_parts = network_address.split("/")
network_address = network_parts[0]
subnet_mask_length = int(network_parts[1])
subnet_mask = (0xffffffff << (32 - subnet_mask_length)) & 0xffffffff
# 将 IPv4 地址转换为整数类型
network_address_int = 0
for octet in network_address.split("."):
network_address_int = (network_address_int << 8) + int(octet)
# 计算每个互联子网中可用的地址数量
subnet_size = 4
# 计算需要的互联地址数量
num_subnets = num_pairs
if num_subnets > (subnet_mask ^ 0xffffffff) / subnet_size + 1:
raise ValueError("Not enough addresses in the network")
# 生成互联子网的 IP 地址
interconnect_addresses = []
subnet_index = 0
local = []
str_dist = []
for i in range(num_subnets):
subnet_address_int = (network_address_int & subnet_mask) + (subnet_index * subnet_size)
if subnet_index % 2 == 0:
local_address_int = subnet_address_int + 1
remote_address_int = subnet_address_int + 2
else:
local_address_int = subnet_address_int + 2
remote_address_int = subnet_address_int + 1
local_address = ".".join(str((local_address_int >> (i * 8)) & 0xff) for i in range(4)[::-1])
remote_address = ".".join(str((remote_address_int >> (i * 8)) & 0xff) for i in range(4)[::-1])
interconnect_addresses.append((local_address, remote_address))
subnet_index += 1
# 输出互联地址
for index, pair in enumerate(interconnect_addresses):
if index % 2 == 0:
# print(f"{pair[0]} {pair[1]}")
local.append(pair[0])
str_dist.append(pair[1])
else:
# print(f"{pair[1]} {pair[0]}")
local.append(pair[1])
str_dist.append(pair[0])
for n in local:
print(n)
print("")
for m in str_dist:
print(m)
# 调用函数生成互联地址
generate_interconnect_address()
ipv6.py 文件代码:
import ipaddress
def ipv6_allocation():
ipv6_subnet_input = input('请输入一个/120的IPv6地址段(例如:fec0::2:0/120):')
number_of_pairs_input = input('请输入需要分配的/127地址对数:')
try:
ipv6_subnet = ipaddress.IPv6Network(ipv6_subnet_input)
number_of_pairs = int(number_of_pairs_input)
if ipv6_subnet.prefixlen != 120:
print('输入的并非/120的IPv6地址段,请重新运行程序并输入正确的地址段。')
return
if number_of_pairs * 2 > ipv6_subnet.num_addresses:
print('输入的地址对数超过了/120地址段内可用的地址数,请重新运行程序并输入正确的地址对数。')
return
allocated_addresses = list(ipv6_subnet.subnets(new_prefix=127))
print('\n本端地址')
for subnet in allocated_addresses[:number_of_pairs]:
print(subnet.network_address)
print('\n对端地址')
for subnet in allocated_addresses[:number_of_pairs]:
print(subnet.network_address + 1)
except ValueError:
print('输入的IPv6地址段或地址对数格式错误,请重新运行程序并输入正确的值。')
if __name__ == '__main__':
ipv6_allocation()
ipv4.bat 文件代码
@echo off
chcp 65001 >nul
:loop
python ipv4.py
echo.
echo 按任意键重新执行程序,或按Ctrl+C退出...
pause >nul
goto loop
ipv6.bat 文件代码
@echo off
chcp 65001 >nul
:loop
python ipv6.py
echo.
echo 按任意键重新执行程序,或按Ctrl+C退出...
pause >nul
goto loop
添加完成之后,就可以在cmd允许这两个程序了,ipv4对应ipv4互联分配程序,ipv6对应ipv6互联分配程序
先输入你想分配互联地址网段,再输入个数,程序就会自动分配了,本端 对端也会展示。