Как вывести построчно каждый 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