使用fping在Python中获取ping时间

时间:2013-04-22 20:15:49

标签: python network-programming ping icmp

我有一个IP列表(从Python Scapy中的traceroute生成),我需要发送3个ping来测量每个跃点的平均时间。我的第一个方法是使用套接字构建ICMP请求并测量响应时间。但是在ping多个主机时它是不准确和缓慢的。我尝试使用普通的Linux ping,但是在等待响应时我的for i循环被阻止了,显然我希望所有ping请求同时发送出来。

所以我正在寻找一种在Linux中使用fping的方法,我给出了一个IP列表然后让它来完成构建数据包的工作。但是我不确定如何将参数列表传递给shell命令,或者在完成后将数据返回到数组中以便进一步处理。

任何指示赞赏!

2 个答案:

答案 0 :(得分:3)

我对fping了解不多,但是这样......

import subprocess

CMD = ['fping', 'param1', 'param2']

result = subprocess.check_output(CMD)

...将运行fping param1 param2,并在result进程终止后将输出作为字符串放入fping变量。

您可以使用result.splitlines()将输出拆分为行。

这是使用ping快速获取三个ping时间到localhost的快速单行示例...

>>> [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']

答案 1 :(得分:0)

以下函数解析# python moves = ([1,2],[2,1],[-1,2],[-1,-2],[1,-2],[2,-1],[-2,1],[-2,-1]) def springerzug(start, end, path, sofar = 0): if start == end: return 0 # Terminate if path is too long if len(path) > 9: return 999 # omit the else possibles = [] ergebnisse = [98] # default value for x in range(8): possibles.append([start[0] + moves[x][0], start[1] + moves[x][1]]) for i in range(8): if 0 < possibles[i][0] < 9 and 0 < possibles[i][1] < 9 \ and possibles[i] not in path: ergebnisse.append(springerzug(possibles[i], end, path.copy() + [possibles[i]])) return min(ergebnisse)+1 print(springerzug([1,1], [5,2], [])) 的输出并返回包含每个主机可用性的字典:

fping