自制ipv4&ipv6互联地址分配程序

###本人从事互联网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互联分配程序

先输入你想分配互联地址网段,再输入个数,程序就会自动分配了,本端 对端也会展示。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值