LINUX.ORG.RU

Поправить скрипт получения списка IP адресов из диапазона

 , ,


0

1

Здравствуйте.

Нашел в сети вот это - алгоритм получения списка IP адресов из диапазона. Работает если указываю любой диапазон, но только не /32. С ним спотыкается. Я в питоне вообще никак. Возможно ли поправить чтоб работало с /32?

Работу готов оплатить.

Спасибо.

 
import sys, struct, socket
 
(ip, cidr) = sys.argv[1].split('/')
cidr = int(cidr)
host_bits = 32 - cidr
i = struct.unpack('>I', socket.inet_aton(ip))[0] # note the endianness
start = (i >> host_bits) << host_bits # clear the host bits
end = start | (1 << host_bits)
 
# excludes the first and last address in the subnet
for i in range(start, end):
    print(socket.inet_ntoa(struct.pack('>I',i)))

… но /32 - это не диапазон. Это один адрес. Тебе его напечатать надо?

host_bits = 32 - cidr
if host_bits == 0:
    print(ip)
else:
# тут всё остальное до конца скрипта
aol ★★★★★
()

Можно проще написать

from ipaddress import IPv4Network
from sys import argv


for ip in IPv4Network(argv[1]):
    print(f'{ip}')
itn ★★★
()

одно непонятно, каким боком здесь питон

Anoxemian ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.