Форум сайта python.su
2
Приветствую!
Ломаю голову, никак не могу подобрать подходящее решение
Есть диапазон IP-адресов в таком формате: 77.79.155.0-77.81.155.255 (str)
Необходимо сгенерировать список вида:
77.79.155.0
77.79.155.1
….
77.81.155.254
77.81.155.255
Офлайн
88
ipaddress появился только в третьей реинкарнации, так что придётся мудрить, и не только со split.
Офлайн
2
Shaman, а в случае использования python3.4 ipaddress подойдет под мои нужды? что-то я в доках не увидел, как сгенерить лист из диапазона такого формата
Офлайн
88
Офлайн
88
И да, для второго питона есть бэкпорты этой библиотеки (хотя, если мне не изменяет память, ipaddress - сторонняя библиотека, вошедшая в состав стандартной).
Офлайн
72
Не забываем, что ip-адрес, это просто int32
def ip2bin(s): b = 0 for x in s.split('.'): b |= int(x) b <<= 8 return b >> 8 def bin2ip(b): ls = [] for _ in range(4): ls.append(str(int(b & 0b11111111))) b >>= 8 return '.'.join(reversed(ls)) def iter_net(ip1, ip2): x = ip2bin(ip1) b2 = ip2bin(ip2) while x <= b2: yield bin2ip(x) x += 1 for x in iter_net('192.168.0.1', '192.168.0.127'): print x
Офлайн
2
def ip_networks(): ip_netw = open('ip.txt').read().splitlines() all_list = [] for x in ip_netw: start, end = x.split('-') networks = [ipaddr for ipaddr in ipaddress.summarize_address_range( ipaddress.IPv4Address(start), ipaddress.IPv4Address(end) )] for net in networks: for ip in net: all_list.append(str(ip)) return all_list
Офлайн
2
PooH, отличное решение! сам до такого врядли бы додумался
Офлайн
0
Офлайн