c - Epoch和wireshark捕获

标签 c wireshark epoch wireshark-dissector

我有一个 .pkt 嗅探器捕获。当我从 C 应用程序中读取捕获中的每个数据包时,我观察到附加了一个 radio header 。 radio header 包含每个数据包的时间(以纪元为单位)。我想找出两个数据包之间的时间差(以毫秒为单位)。我不知道如何区分两个纪元值并找出以毫秒为单位的时间差。请帮我解决这个问题。

最佳答案

I have a .pkt sniffer capture.

什么是“.pkt 嗅探器捕获”?你是用Wireshark抓包的吗?如果是这样,那么它要么是 pcap 要么是 pcap-ng 捕获。

The radio header contains the time in epoch for each and every packet.

在大多数嗅探器格式中,数据包的时间戳是“记录 header ”的一部分,而不是 radio 信息 header 的一部分。对于 802.11 捕获,某些捕获文件格式可能会提供包含 802.11 定时同步功能计时器的 radio 信息 header ,但该计时器没有指定的纪元。

数据包时间戳的纪元取决于捕获文件格式。 pcap 和 pcap-ng 使用 UN*X 纪元 1970 年 1 月 1 日 00:00:00 UTC,因为 pcap 最初在 UN*X 上使用,并且 pcap-ng 受 pcap 的影响。例如,其他文件格式可能使用 Windows FILETIME 纪元 1601 年 1 月 1 日 00:00:00“UTC”(使用 proleptic Gregorian calendar )或某个其他时间原点。

但如果你想要的只是

find out the time difference between two packets in terms of milliseconds

那么纪元是无关紧要的 - 如果时间表示为“自某个纪元以来的X秒”(其中X不一定是整数;它可以有一个小数部分),则“自纪元以来的X秒”和“自纪元以来的Y秒”之间的时间为X - 是的,纪元本身就抵消了。

那么,最大的问题是如何表示“自某个纪元以来的秒数”。秒的整数计数? {纳秒、十分之一微秒、微秒、毫秒等}的整数计数?秒和{纳秒、微秒等}的组合?这就是为什么我们需要知道这是文件格式时间戳还是 802.11 TSFT,如果是文件格式时间戳,则是什么文件格式。

如果,正如您似乎指出的那样,这是一个 Wireshark 捕获(即,使用 Wireshark 进行的捕获,而不仅仅是 Wireshark 恰好能够读取的捕获 - 它可以从不使用其 native pcap 或 pcap-ng 格式),则文件格式为 pcap 或 pcap-ng(在这种情况下,纪元为 Epoch,即 1970 年 1 月 1 日,00:00:00 UTS),时间戳为 32-自纪元以来的位秒数和自该秒以来的 32 位微秒(对于 pcap)或自纪元以来的 64 位单位计数(单位由捕获相关数据包的接口(interface)的接口(interface)描述 block 指定;默认为微秒)。

要计算两个 pcap 数据包的时间戳之间的差异(以微秒为单位),请将秒值之间的差异乘以 1,000,000,然后加上微秒值之间的差异(两个差异均带符号)。要将其转换为毫秒,请将其除以 1,000。

要计算两个 pcap-ng 数据包的时间戳之间的差异,请取时间戳值之间的差异;这是秒的分数的计数,其中分数由接口(interface)描述 block 中的指定值定义。要将其转换为毫秒,请根据分数进行适当调整(例如,如果是微秒,则将其除以 1,000)。

要计算两个 802.11 数据包的 TSFT 值之间的差异,只需将一个值减去另一个值即可; TSFT 值(至少对于 radiotap 而言)以微秒为单位,因此,要将其转换为毫秒,请将其除以 1,000。

关于c - Epoch和wireshark捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15956296/

相关文章:

c - K-means 算法错误

javascript - 日期类转换时间戳错误

c++ - 如何将 EPOCH 时间转换为时间格式 (hh :mm)

lua - 在 Lua Wireshark Dissector 中重新组装数据包

java - Android获取当前时间戳?

C - '=' 标记之前的预期表达式...在没有 '=' 的情况下在线

c++ - 根据一组编码标准检查 C/C++ 源代码的免费工具?

c - 指向指针数组的指针返回初始地址

rust - 将 pcap 数据包写入没有文件头的文件

lua - 强制打开 Lua 控制台或启动时自动运行 Lua 控制台