如何使用Python(或Scapy)生成随机IPv6地址?

时间:2011-10-05 11:21:13

标签: python string ipv6 scapy

在我的测试用例中,我需要发送带有随机IPv6源地址和固定前缀的NA。 例如:

固定前缀2001 :: cafe:/ 64。地址的其余部分应该是随机的。

如何在Python或Scapy中实现?

4 个答案:

答案 0 :(得分:5)

import random   
M = 16**4
"2001:cafe:" + ":".join(("%x" % random.randint(0, M) for i in range(6)))

答案 1 :(得分:4)

不确定问题的哪个部分你想要随机。我假设最后2个字节。

使用python netaddr库:

import random
from netaddr.ip import IPNetwork, IPAddress

random.seed()
ip_a = IPAddress('2001::cafe:0') + random.getrandbits(16)
ip_n = IPNetwork(ip_a)
ip_n.prefixlen = 64

print ip_a
print ip_n

示例输出:

2001::cafe:c935
2001::cafe:c935/64

优于简单字符串格式化的优点是,可以轻松自定义起始地址,随机位len。 netaddr类也有许多有用的attr,例如网络的广播地址。

答案 2 :(得分:0)

只使用字符串格式:

import random

random.seed()
print '2001::cafe:%x/64' % random.getrandbits(16)

答案 3 :(得分:0)

Scapy内置了一个生成随机ipv6地址的功能。

source = RandIP6("2000::cafe:*:*")
print source

请注意,如果它与zero's混乱,则需要在第286行之前的scapy / volatile.py的broncode中添加2行

if n == 0:
        ip.append("0")