如何测量scapy中发送和接收的时间?

How to measure time from send and receive in scapy?

我在 scapy 中编写了这样的代码来进行简单的 ping - 没什么特别的,但看起来很有希望。

def ping(ip):
    answer = sr1(IP(dst=ip) / ICMP())

如何在 scapy 中测量从发送到接收的行程时间。问题很简单,但也很有必要学起来。我在互联网和文档中搜索了一些解决方案,但没有效果。

你能帮忙吗?

完整代码如下所示,但测量 ping 太长了。

import time

from scapy.layers.inet import ICMP, IP
from scapy.sendrecv import sr1, sr


def ping(ip):
    packet = IP(dst=ip) / ICMP()
    t0 = time.perf_counter()
    answer = sr1(packet)
    t1 = time.perf_counter()
    print(t1 - t0)

    answer.show()
    answer[ICMP].show()

ping('192.168.1.1')

t1 - t0 = 0.12669169999999985s 的结果。 ping.exe = 4ms 有问题。

您应该使用 sent_time 参数。例如,如果您使用 sr,您可以这样做:

ans, unans = sr(IP(dst="www.google.com")/ICMP())
timestamp = ans[0][1].time - a[0][0].sent_time

在你的例子中:

packet = IP(dst=ip)/ICMP()
a = sr1(packet)
timestamp = a.time - packet.sent_time

也可以