【问题标题】:Extract tcpdump timestamp from txt file从 txt 文件中提取 tcpdump 时间戳
【发布时间】:2014-10-30 01:53:07
【问题描述】:

我正在尝试使用 python 从 tcpdump 的输出中计算吞吐量。到目前为止,我从 python 调用 tcpdump 并设法将输出写入文本文件。示例输出:

01:06:23.649464 0us IP (tos 0x0, ttl 128, id 63533, offset 0, flags [none], proto UDP (17), length 72) 251.146.199.137.1066 > 156.96.135.220.62827: UDP , 长度 44

01:06:23.920316 0us IP (tos 0x0, ttl 1, id 10354, offset 0, flags [none], proto IGMP (2), length 32, options (RA)) 251.146.198.120 > fm-dyn- 140-0-193-221.fast.net.id: [|igmp]

但是,我被困在下一部分。提取时间和长度(第一个)并计算吞吐量。我是 python 新手,对正则表达式不清楚。此外,由于时间戳包括微秒,是否有任何简单的方法可以使用它们来计算吞吐量?

提前致谢。

【问题讨论】:

  • 不。在这一个中,他们正在读取 tcpdump 的 text 输出;在另一个问题中,他们似乎正在读取 pcap 二进制文件,并且使用正确的 Python 包来读取 pcap 文件,获取时间戳非常容易。从文本中提取它需要更多的工作。
  • @GuyHarris 没错。为了可靠地解析输出,您需要使用文本输出不是的文档格式。
  • 好吧,至少现在已经记录了时间戳格式;我刚刚更新了 tcpdump 手册页以记录时间戳格式。 (其余部分没有记录,并且更频繁地更改。)

标签: python parsing tcpdump


【解决方案1】:

忘记正则表达式,你可以使用datetime模块。

使用datetime

>>> from datetime import datetime
>>> lines = ['01:06:23.649464 0us IP (tos 0x0, ttl 128, id 63533, offset 0, flags [none], proto UDP (17), length 72) 251.146.199.137.1066 > 156.96.135.220.62827: UDP, length 44', '01:06:23.920316 0us IP (tos 0x0, ttl 1, id 10354, offset 0, flags [none], proto IGMP (2), length 32, options (RA)) 251.146.198.120 > fm-dyn-140-0-193-221.fast.net.id: [|igmp]']
>>> times = [datetime.strptime(line[:15], '%H:%M:%S.%f') for line in lines]

吞吐量可以直接计算,但您需要使用strptimedatetime 到那个。

>>> times[1] - times[0]
datetime.timedelta(0, 0, 270852)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2016-08-10
    • 2021-07-19
    • 1970-01-01
    • 2018-06-28
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多