Как вывести построчно каждый ip-адрес из диапазона например 192.168.1.5-10

Есть файл со списком ip-адресов. Написаны они могут быть в нескольких форматах: просто ip (192.168.1.1), диапазон (192.168.2.80-200) или вся подсеть (192.168.3.*). В случае варианта с подсетью, выполнил код следующим образом:

if line.find("*"):
    a = 0
    while a < 255:
        a += 1
        print(line.replace('*', str(a)).strip())

В случае с диапазоном не могу понять как вывести в переменные значения слева и справа от знака "-"


Ответы (2 шт):

Автор решения: Alioshca Z

Попробуйте так:

s = '192.168.2.80-200'

if '-' in s:
    s_start = '.'.join(s.split('-')[0].split('.')[:-1])
    s_middle = s.split('.')[-1].split('-')[0]
    s_end = s.split('-')[1]
    for i in range(int(s_middle), int(s_end)+1):
        print('{}.{}'.format(s_start, i))
→ Ссылка
Автор решения: eri

Диапазон

>>> import ipaddress
>>> start = ipaddress.ip_address('192.168.0.1')
>>> stop = ipaddress.ip_address('192.168.0.15')
>>> 
>>> while start<=stop:
...     print(start)
...     start+=1
... 
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
192.168.0.6
192.168.0.7
192.168.0.8
192.168.0.9
192.168.0.10
192.168.0.11
192.168.0.12
192.168.0.13
192.168.0.14
192.168.0.15

И даже без цикла

for addr in ipaddress.summarize_address_range(start, stop):
    print(addr)

Или всю подсеть

>>> for addr in ipaddress.ip_network('192.0.2.0/255.255.255.0'):
...     addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
....
IPv4Address('192.0.2.255')

Эти методы работают и для ipv6

→ Ссылка