Python:如何ping一系列IP地址?

Python:如何ping一系列IP地址?,python,networking,cmd,ping,Python,Networking,Cmd,Ping,我想用Python ping一系列IP地址并打印: “在X%的包丢失率下可以访问IP”或 “由于X%的包丢失,无法访问IP” 我想尝试的范围是192.168.0.X,其中X是0-255的范围 这是到目前为止我的代码 import shlex import subprocess import os for x in range(0, 256): cmd=shlex.split("ping -cl 192.168.0." + str(x)) try: output =

我想用Python ping一系列IP地址并打印: “在X%的包丢失率下可以访问IP”或 “由于X%的包丢失,无法访问IP”

我想尝试的范围是192.168.0.X,其中X是0-255的范围

这是到目前为止我的代码

import shlex
import subprocess
import os

for x in range(0, 256):
    cmd=shlex.split("ping -cl 192.168.0." + str(x))
    try:
       output = subprocess.check_output(cmd)
    except subprocess.CalledProcessError,e:
       #Will print the command failed with its exit status
       print "The IP {0} isn't reachable".format(cmd[-1])
    else:
       print "The IP {0} is reachable".format(cmd[-1])
我的代码有什么问题?我还注意到,当我尝试命令“ping-cl192.168.0.2”时,它说-cl是一个仅限管理员的命令。我是我电脑上的管理员,我以管理员的身份运行cmd,那有什么问题

我正在使用Windows8.1
Python v2.7.9

如果您正在使用linux,并且只想看到数据包丢失:

import shlex
from subprocess import PIPE, Popen


cmd1 = shlex.split("grep -oP '\d+(?=% packet loss)'")
for x in range(1, 256):
    cmd = "ping  -c 4  192.168.43.{}".format(x).split()
    p1 = Popen(cmd, stdout=PIPE, stderr=PIPE)
    p2 = Popen(cmd1, stdin=p1.stdout, stdout=PIPE)
    p1.stdout.close()
    output = p2.communicate()[0].rstrip()
    if output == "100":
        print("{}% percent packet loss from unreachable ip {}".format(output, cmd[-1]))
    else:
        print("{}% percent packet loss from reachable ip {}".format(output, cmd[-1]))
免责声明我不使用windows,因此我愿意更正,但这可能有效:

for x in range(1, 256):
    cmd = "ping  -c 1  192.168.43.{}".format(x).split()
    p1 = Popen(cmd, stdout=PIPE, stderr=PIPE)
    lines = p1.communicate()[0].splitlines()
    output = (lines[-2]).rsplit(None,5)
    output = output[-5].rstrip()
    if output == "100%":
        print("{} percent packet loss from unreachable ip {}".format(output, cmd[-1]))
    else:
        print("{} percent packet loss from reachable ip {}".format(output, cmd[-1]))

如果已安装scapy模块,则应尝试使用:

clients = arping("192.168.1.*")
print clients

它速度快,还可以打印与ip相关的mac地址,因此非常有用。

您的操作系统是什么?如果您只在一个名为
admin
的组中,这还不够。您必须是
root
才能控制ping的数据包发送速率,因为ping可能被误用到其他主机。我的操作系统是Windows 8.1感谢您的回复!当然很有帮助,但我使用的是windows 8.1。不用担心,如果您正在进行大量与网络相关的编码,那么python nmap将是一个不错的选择。我不使用windows,但您应该能够只使用第一个命令和p1并从中获取通信输出,您可以轻松拆分输出的字符串以获取所需的数据need@NathanielSharp,我添加了一个没有grep的替代方法。试一试,看看它是如何工作的,您必须更改spliting和ping命令以适应windows输出