Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用dpkt的微秒分辨率_Python - Fatal编程技术网

Python 使用dpkt的微秒分辨率

Python 使用dpkt的微秒分辨率,python,Python,我正在尝试创建一个Python脚本,在该脚本中,我解析一个pcap文件,并将流量突发性测量到亚毫秒级。问题是dpkt提供的时间戳似乎没有提供足够好的分辨率。下面的脚本 #!/usr/bin/python 导入dpkt,系统 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 "pack

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

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,精确到微秒。有人知道如何获得完整的时间戳吗

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

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

yield (hdr.tv_sec + (hdr.tv_usec / 1000000.0), buf)
可以将其更改为以下内容,以确保返回秒和微秒的原始整数值:

yield ((hdr.tv_sec, hdr.tv_usec), buf)

元组的格式符合我的喜好,可以修改。

我假设您正在执行以下操作:

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'