Python 仅输出激活
我正试图使这个IP扫描器只显示活动的IP,它ping任何帮助是可怕的。 多谢各位Python 仅输出激活,python,python-3.x,Python,Python 3.x,我正试图使这个IP扫描器只显示活动的IP,它ping任何帮助是可怕的。 多谢各位 # Script to ping all IP addresses in a /24 subnet import os network = input ("Enter IP Network to scan: ") print(network) # Iterate over all usable IPs in this subnet for host in range (1, 254): print("Ping
# Script to ping all IP addresses in a /24 subnet
import os
network = input ("Enter IP Network to scan: ")
print(network)
# Iterate over all usable IPs in this subnet
for host in range (1, 254):
print("Pinging " + network + "." + str(host))
os.system("ping -c 2 " + network + "." + str(host))
在ping IP时,您会得到一些字符串格式的结果。试着思考不同的IP如何产生不同的结果。例如,对于活动IP地址,字符串可能是这样的-
PING 10.0.0.254 (10.0.0.254) 56(84) bytes of data.
64 bytes from 10.0.0.254: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 10.0.0.254: icmp_seq=2 ttl=64 time=0.044 ms
--- 10.0.0.254 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1021ms
rtt min/avg/max/mdev = 0.030/0.037/0.044/0.007 ms
对于一个不活跃的人
PING 10.0.0.253 (10.0.0.253) 56(84) bytes of data.
From 10.0.0.254 icmp_seq=1 Destination Host Unreachable
From 10.0.0.254 icmp_seq=2 Destination Host Unreachable
--- 10.0.0.253 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1015ms
pipe 2
那么,考虑一下如何解析这些字符串对象来决定?我们可以观察到的一个非常简单的例子是
如果输出中没有“不可访问”:
打印(ip+“处于活动状态”)
您还可以查看ping统计信息并检索数据包丢失。如果是100%,网络就断了!看看如何使用字符串,如何基于标记进行拆分,或者如何查找子字符串。如果你觉得很淘气,你也可以使用正则表达式。我不想分析ping命令的输出,而是要分析它的退出代码。根据手册页
The ping utility exits with one of the following values:
0 At least one response was heard from the specified host.
2 The transmission was successful but no responses were received.
any other value An error occurred.
所以代码可能是这样的
import os
network = input ("Enter IP Network to scan: ")
print(network)
for host in range (1, 254):
print("Pinging " + network + "." + str(host))
h = network + "." + str(host)
res = os.system("ping -q -c 2 " + h)
if res == 1 or res == 2:
print("host " + h + "is active"
你试了什么?你有没有考虑读取你正在执行的命令的输出?我还在学习Python ATM,但是我得到的输出是。192.168.0.2 ping统计---发送2个数据包,接收0个数据包,+2个错误,100%数据包丢失,时间1009ms管道2 ping 192.168.0.3 ping 192.168.0.3(192.168.0.3)56(84)字节数据。从192.168.0.12 icmp_-seq=1目标主机不可访问从192.168.0.12 icmp_-seq=2目标主机不可访问,但我只想让它显示成功的一个。您必须检查返回的os.system调用,并只打印结果等于0或2的IP地址。@YuriGinsburg我该怎么做?我将使用if循环或虽然循环,然后我将如何写它,如前所述,仍然在学习和有一个思维障碍。谢谢你的信息,它已经非常有用,给了我一些更多的知识,我感谢你