Как создать случайный адрес IPv6 с помощью Python (или в Scapy)? - PullRequest
2 голосов
/ 05 октября 2011

В моем тестовом случае мне нужно отправить NA со случайным адресом источника IPv6 и фиксированным префиксом. Например:

фиксированный префикс 2001 :: cafe: / 64. Остальная часть адреса должна быть случайной.

Как добиться в Python или в Scapy?

Ответы [ 4 ]

5 голосов
/ 05 октября 2011
import random   
M = 16**4
"2001:cafe:" + ":".join(("%x" % random.randint(0, M) for i in range(6)))
4 голосов
/ 05 октября 2011

Не уверен из вопроса, с какими частями адреса вы хотите быть случайным. Я предполагаю последние 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 есть много полезных атрибутов, например, широковещательный адрес сети.

0 голосов
/ 21 ноября 2013

Scapy имеет встроенную функцию для генерации случайных адресов ipv6.

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

Обратите внимание, что, если он возится с zero's, вам нужно добавить 2 строки в бронзовом коде scapy / volatile.py перед строкой 286

if n == 0:
        ip.append("0")
0 голосов
/ 05 октября 2011

Просто используя форматирование строки:

import random

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