python的 ipv6 自动生成

本文分享了一款Python程序,能够将大整数转换为IPv6地址格式,并演示了如何批量生成并写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上很多数字转ipv4的程序,没有数字转ipv6的。

由于单位测试要用,我先是在网上找了半个小时,没找到。一怒之下,被逼无奈,自己写了一个。贡献出来,正好大家也使用一下吧。

功能:把一个数字转换成ipv6的地址。多大的都行。


#!/usr/bin/python
#-*-coding:utf-8-*- 


import string


base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]


def dec2hex(string_num):
    num = int(string_num)
    mid = []
    while True:
        if num == 0: break
        num,rem = divmod(num, 16)
        mid.append(base[rem])


    return ''.join([str(x) for x in mid[::-1]])
 
def int2ip(ipInt):
    ipStr = ''
    leftValue = ipInt
    for i in [7, 6, 5, 4, 3, 2, 1, 0]:
        ipTokenInt = dec2hex(leftValue / 65536**i)
        if(ipTokenInt==''):
            ipTokenInt = 0
        ipStr = ipStr + str(ipTokenInt)
        if i!=0:
            ipStr = ipStr + ':'
        leftValue %= 65536**i
    return ipStr    

if __name__ == "__main__":
    try:
        file_object = open('ipv6.wlist', 'w')
        n = 400000000000000000000000000000000000
        print 'start ip'+int2ip(n)
        for i in range(999):
            file_object.write(int2ip(n)+'\n')
            n=n+1
        n=n+1
        file_object.write(int2ip(n))
    finally:
        file_object.close()


起始ip的数字 就是那个 40000000000000 就是说 从这个数字开始计算ipv6的。以后每次ipv6 都是数字加1. 写文件到 ipv6.wlist中。

行了,python2的程序。

可以运行,本次亲测,亲自使用的。

### IPv6 地址生成原理及方法 #### 单播地址的生成 IPv6 的单播地址可以手动分配,也可以通过无状态自动配置 (SLAAC) 或有状态自动配置动态获取。对于 EUI-64 格式的自动生成尤为常见。 EUI-64 是一种基于 MAC 地址转换的方法,用于创建唯一的接口标识符。具体过程如下: 1. 获取设备的 48 位 IEEE MAC 地址; 2. 将其插入到特定位置并修改第 7 位(从最左边计数),即全局/本地标志位,将其置为 1 表示这是一个全球唯一标识符; 3. 插入 "FFFE" 字节作为分隔符形成完整的 64 位扩展唯一标识符; 例如,如果原始 MAC 地址为 `00:A0:C9:14:C8:2F` ,则对应的 EUI-64 接口 ID 应该是 `02A0:C9FF:FE14:C82F` [^3]。 ```python def generate_eui_64(mac_address): mac_parts = mac_address.split(':') eui_64 = f"{int(mac_parts[0], 16)^2:02X}:{mac_parts[1]}:{mac_parts[2]}" eui_64 += ":ff:fe:" + ':'.join(mac_parts[-2:]) return eui_64.lower() print(generate_eui_64("00:A0:C9:14:C8:2F")) ``` #### 组播地址的生成 组播地址通常由前缀 FF00::/8 和后续字段组成,这些字段定义了不同的作用范围和服务类型。为了便于理解和记忆,这里给出一个具体的例子来说明如何构建一个多播地址。 假设要建立一个节点本地范围内有效的所有路由器多播群组,则可按照以下方式构造相应的 IPv6 多播地址:`FF02::2` 。这里的 `FF02` 表明这是个链路局部级别的多播地址,而结尾部分表示目标对象——本案例中是指向所有的路由器 [^2]。 #### 任播地址的生成 任播地址是从一组具有相同目的地址的服务端口中选取最近的一个成员来进行数据传输的一种特殊形式的单播地址。这类地址可以直接指定给多个主机或路由器,并且当发送者向此地址发起请求时,只有距离最近的那个接收方会响应消息。因此,任播地址并不需要特别复杂的算法去生成,而是依赖于路由协议的选择逻辑实现最优路径匹配 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值