首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dpkt的微秒分辨率

使用dpkt的微秒分辨率
EN

Stack Overflow用户
提问于 2014-04-16 04:06:27
回答 2查看 1.3K关注 0票数 2

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

代码语言:javascript
复制
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格式。有人知道如何获取完整的时间戳吗?

EN

回答 2

Stack Overflow用户

发布于 2015-05-30 07:18:46

我假设您正在做这样的事情:

代码语言:javascript
复制
for ts, buf in pcap:
    print ts

然后,您观察到时间戳是1408173480.93而不是1408173480.936543。这是因为python中的print函数将浮点数限制为两位小数。

示例:

代码语言:javascript
复制
>>> x = 1258494066.119061
>>> x
1258494066.119061
>>> print x
1258494066.12

如果确实需要打印完整的值,请使用format:

代码语言:javascript
复制
>>> "{0:.6f}".format(x)
'1258494066.119061'
票数 3
EN

Stack Overflow用户

发布于 2014-05-23 23:22:07

不知道这是否对你有帮助,但我注意到了同样的事情。对于我的要求,我更喜欢整数值,而不是浮点转换。当然,为了执行以下操作,您需要源代码:

它的起源来自pcap.py中的dpkt (版本1.8)目录中的第151行

代码语言:javascript
复制
yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf)

可以将其更改为以下值,以确保返回原始的秒和微秒整数值:

代码语言:javascript
复制
yield ((hdr.tv_sec, hdr.tv_usec), buf)

元组的格式是根据我的喜好设置的,并且可以修改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23093447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档