我正在尝试创建一个Python脚本,在这里我解析一个pcap文件,并将流量burstiness测量到亚毫秒级别。问题是dpkt提供的时间戳似乎没有提供足够好的分辨率。以下脚本
#!/usr/bin/python语言
导入dpkt,sys

f=file(sys.argv[1],"rb")
pcap=dpkt.pcap.Reader(f)


for ts, buf in pcap:
  eth=dpkt.ethernet.Ethernet(buf)
  size = len(eth)
  print "packet size %s" % size
  print "timestamp %s" % ts

产生以下结果
数据包大小199
时间戳1397589057.04
数据包大小119
时间戳1397589057.04
数据包大小66
时间戳1397589057.04
数据包大小247
时间戳1397589057.04
这些包的实际时间戳的格式应该是.043549,它可以降到微秒。有人知道如何得到完整的时间戳吗?

最佳答案

我假设你在做这样的事情:

for ts, buf in pcap:
    print ts

然后观察时间戳是1408173480.93而不是1408173480.936543。这是因为python中的print函数将浮点限制为两个小数位。
例子:
>>> x = 1258494066.119061
>>> x
1258494066.119061
>>> print x
1258494066.12

如果确实需要打印完整值,请使用格式:
>>> "{0:.6f}".format(x)
'1258494066.119061'

关于python - 使用dpkt的微秒分辨率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23093447/

10-11 20:31