簡體   English   中英

Python 3.6(Windows)中的簡單Ping掃描無法正常工作

[英]Simple Ping Sweep in Python 3.6 (Windows) doesn't work as expected

我發現以下腳本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

我嘗試了您的示例,並遇到了同樣的問題,但是我意識到,最后一個IP總是處於活動狀態,這就是我認為問題在於,在嘗試執行ping操作時,文件讀取出現了“ \\ n” 。

我稍微修改了一下代碼,並使它正常工作:

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()”即可完成操作。

如果您發現任何問題,請告訴我。

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM