Python 3.6(Windows)中的简单Ping扫描无法正常工作

时间:2019-04-24 05:05:25

标签: python python-3.x

我找到了以下脚本https://stackoverflow.com/a/34737809/11392987并尝试运行它。由于我在Windows上运行Python 3.6,因此我对代码做了一些修改。这是我现在正在使用的代码。

import subprocess
import os

with open('ip.txt', 'r') as f:
    for ip in f:
        result=subprocess.Popen(["ping", "-n", "1", ip],stdout=f, stderr=f).wait()
        if result:
            print(ip, "inactive")
        else:
            print(ip, "active")

但是,结果似乎不正确。两个主机实际上都在运行。

C:\Python>python ping.py
192.168.0.1
 inactive
192.168.0.2 active

C:\Python>

是否可以在一行中显示第一个输出...例如

192.168.0.1 inactive
192.168.0.2 active

更新

如果有更好,更简单的方法在Python中编写ping清除程序,从而将IP列表保存在ip.txt文件中,请告诉我。

所需的输出

192.168.0.1 inactive
192.168.0.2 active
192.168.0.3 active
192.168.0.4 inactive
192.168.0.5 inactive

ip.txt

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5

1 个答案:

答案 0 :(得分:0)

我尝试了您的示例,并遇到了同样的问题,但是我意识到,最后一个IP始终是活动的IP,这就是我认为问题出在尝试读取文件时读取的文件是“ \ n”执行ping操作。

我稍稍更改了代码并使其正常工作:

import subprocess
import os

with open('ip.txt', 'r') as f:
    for ip in f:
        result=subprocess.Popen(["ping", "-n", "1", ip.strip()],stdout=f, stderr=f).wait()
        if result:
            print(ip.strip(), "inactive")
        else:
            print(ip.strip(), "active")

只需在从文件接缝中读取的IP上添加“ strip()”即可完成操作。

如果您有任何问题,请告诉我。

致谢