Ping диапазона адресов

Есть код который пингует все адреса в подсети, но мне нужно пинговать начиная с 100 адреса, есть идеи как это сделать? Если вместо 192.168.21.0/24 ввести 192.168.21.100/24, то выдает ошибку,

import subprocess
import ipaddress

net_addr = '192.168.21.0/24'
ip_net = ipaddress.ip_network(net_addr)

all_hosts = list(ip_net.hosts())

info = subprocess.STARTUPINFO()
info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = subprocess.SW_HIDE


for i in range(len(all_hosts)):
    output = subprocess.Popen(['ping', '-n', '1', '-w', '50', str(all_hosts[i])], stdout=subprocess.PIPE,
                                      startupinfo=info).communicate()[0]

    if "Destination host unreachable" in output.decode('utf-8'):
        print(str(all_hosts[i]), "is Offline")
    elif "Request timed out" in output.decode('utf-8'):
        print(str(all_hosts[i]), "is Offline")
    else:
        print(str(all_hosts[i]), "is Online")

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

Автор решения: CrazyElf

Вот так можно отобрать адреса, начиная с *.100. Может и как-то проще можно, но я библиотеку ipaddress не знаю, не нашёл как по простому младшую часть адреса получить:

# all_hosts = list(ip_net.hosts())
all_hosts = [ip for ip in ip_net.hosts() if int(str(ip).split('.')[-1]) >= 100]
→ Ссылка
Автор решения: alex

all_hosts содержит список хостов сгенерированых из маски. просто возьми срез.

import ipaddress
net_addr = '192.168.21.0/24'
ip_net = ipaddress.ip_network(net_addr)
all_hosts = list(ip_net.hosts())
print(all_hosts[0])  # 192.168.21.1
print(all_hosts[99:][0])  # 192.168.21.100
→ Ссылка