Python实际上有一个非常好用的
方法,可以“返回网络中可用主机的迭代器”(将strict设置为false会遍历所有IP)。
例如:
import subprocess
import ipaddress
subnet = ipaddress.ip_network('192.168.1.0/24', strict=False)
for i in subnet.hosts():
i = str(i)
subprocess.call(["ping", "-c1", "-n", "-i0.1", "-W1", i])
等待间隔(-i0.1)可能对自动化很重要,即使是一秒钟的超时(-t1)也可能在 .0/24 上永远持续。
编辑:
因此,为了跟踪 ICMP(ping)请求,我们可以这样做:
import subprocess
import ipaddress
alive = []
subnet = ipaddress.ip_network('192.168.1.0/23', strict=False)
for i in subnet.hosts():
i = str(i)
retval = subprocess.call(["ping", "-c1", "-n", "-i0.1", "-W1", i])
if retval == 0:
alive.append(i)
for ip in alive:
print(ip + " is alive")
这将返回类似以下内容的东西:
192.168.0.1 is alive
192.168.0.2 is alive
192.168.1.1 is alive
192.168.1.246 is alive
即所有响应ICMP的IP地址范围涵盖整个/23网段-非常酷!
os.system()
)。 - ernie