我有一个 IP 列表(从 Python Scapy 中的跟踪路由生成),我需要发送 3 个 ping 来测量每个跃点的平均时间。我的第一个方法是使用套接字构建 ICMP 请求并测量响应时间。但当 ping 多个主机时,它不准确且缓慢。我确实尝试过使用普通的 Linux ping,但是我的 for i
循环在等待响应时被阻塞,显然我希望所有 ping 请求同时发送出去。
所以我正在寻找一种在 Linux 中使用 fping
的方法,我给出一个 IP 列表,然后让它完成构建数据包的工作。但我不确定如何将参数列表传递给 shell 命令或将数据返回到数组中以在完成后进行进一步处理。
感谢任何指点!
最佳答案
我不太了解fping
,但类似这样的东西......
import subprocess
CMD = ['fping', 'param1', 'param2']
result = subprocess.check_output(CMD)
...将运行 fping param1 param2
,并将输出作为字符串放入 result
变量中,一旦 fping
进程完成终止。
您可以使用 result.splitlines()
将输出分割成行。
这是一个快速的单行示例,使用 ping
获取对本地主机的 3 次 ping 时间...
>>> [line.rpartition('=')[-1] for line in subprocess.check_output(['ping', '-c', '3', 'localhost']).splitlines()[1:-4]]
['0.028 ms', '0.023 ms', '0.025 ms']
关于python - 在 Python 中使用 fping 获取 ping 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155921/