python - 在 Python 中使用 fping 获取 ping 时间

标签 python network-programming ping icmp

我有一个 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/

相关文章:

java - 实现网络协议(protocol) - 关于设计和性能的思考

java - 聊天应用程序出错

C:在第一次连接时发送/接收部分数据包,在第二次连接时接收其余数据包

windows - 为什么 ping 在 Windows 上不需要管理权限?

c++ - 在 Win XP SP3 上 Ping 广播

python - 将 seaborn lineplot 与分组变量一起使用

python - 修复 matplotlib 图

python - 从 Virtual Box 外部访问 python SimpleHTTPServer

ruby - 从255 ip地址查找可用设备的方法

python - 我的 "library sort"实现的经验复杂度似乎与 O(n log n) 之类的不匹配