我有一个IP列表(从Python Scapy中的traceroute生成),我需要发送3个ping来测量每个跃点的平均时间。我的第一个方法是使用套接字构建ICMP请求并测量响应时间。但是在ping多个主机时它是不准确和缓慢的。我尝试使用普通的Linux ping,但是在等待响应时我的for i
循环被阻止了,显然我希望所有ping请求同时发送出来。
所以我正在寻找一种在Linux中使用fping
的方法,我给出了一个IP列表然后让它来完成构建数据包的工作。但是我不确定如何将参数列表传递给shell命令,或者在完成后将数据返回到数组中以便进一步处理。
任何指示赞赏!
答案 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