时代和wireshark捕获
Posted
技术标签:
【中文标题】时代和wireshark捕获【英文标题】:Epoch and wireshark capture 【发布时间】:2013-04-04 02:11:57 【问题描述】:我有一个 .pkt 嗅探器捕获。当我从我的 C 应用程序读取捕获中的每个数据包时,我观察到附加了一个无线电标头。无线电报头包含每个数据包的纪元时间。我想以毫秒为单位找出两个数据包之间的时间差。我不确定如何区分两个纪元值并找出以毫秒为单位的时间差。请帮我解决这个问题。
【问题讨论】:
您需要提供有关您正在处理的数据格式的更多详细信息。 我不太明白你的问题 - 我需要两帧之间的时间差(以毫秒为单位)。我的应用程序是用 C 编写的。 你在说什么协议?什么类型的框架?帧格式是什么?时间戳的单位是什么? 我说的是802.11协议,帧对应这个协议。时间戳的单位是 Epoch。 【参考方案1】:我有一个 .pkt 嗅探器捕获。
什么是“.pkt 嗅探器捕获”?您是否使用 Wireshark 捕获数据包?如果是这样,那么它要么是 pcap 要么是 pcap-ng 捕获。
无线电报头包含每个数据包的纪元时间。
在大多数嗅探器格式中,数据包的时间戳是“记录头”的一部分,而不是无线电信息头的一部分。对于 802.11 捕获,某些捕获文件格式可能会提供包含 802.11 定时同步功能计时器的无线电信息标头,但该计时器没有指定的时期。
数据包时间戳的纪元取决于捕获文件格式。 pcap 和 pcap-ng 使用 1970 年 1 月 1 日 00:00:00 UTC 的 UN*X 纪元,因为 pcap 最初用于 UN*X 并且 pcap-ng 受 pcap 影响。例如,其他文件格式可能使用 1601 年 1 月 1 日 00:00:00“UTC”的 Windows FILETIME 纪元(使用proleptic Gregorian calendar)或其他时间来源。
但如果你想要的只是
以毫秒为单位找出两个数据包之间的时间差
那么时代是无关紧要的 - 如果时间表示为“自某个时代以来的X秒)(其中X不一定是整数;它可能有小数部分),那么 "X seconds since the epoch" 和 "Y seconds since the epoch" 之间的时间是 X - 是的,并且纪元本身取消了。
那么,最大的问题是如何表示“自某个时期以来的秒数”。秒的整数计数? 纳秒、十分之一微秒、微秒、毫秒等的整数计数?秒和纳秒、微秒等的组合?这就是为什么我们需要知道这是文件格式时间戳还是 802.11 TSFT,如果是文件格式时间戳,那是什么文件格式。
如果,正如您所指出的,这是一个 Wireshark 捕获(即,使用 Wireshark 进行的捕获,而不仅仅是 Wireshark 碰巧能够读取的捕获 - 它可以从不使用它的程序中读取捕获)本机 pcap 或 pcap-ng 格式),则文件格式为 pcap 或 pcap-ng(在这种情况下,纪元为纪元,即 1970 年 1 月 1 日,00:00:00 UTS)并且时间戳为 32-自纪元以来的比特秒数和自那一秒以来的 32 位微秒,对于 pcap,或自纪元以来的 64 位单位计数(单位由捕获相关数据包的接口的接口描述块指定;默认为微秒)。
要计算两个 pcap 数据包的时间戳之间的差异(以微秒为单位),请取秒值之间的差异,将其乘以 1,000,000,然后将微秒值之间的差异加上(两个差异都有符号)。要将其转换为毫秒,请将其除以 1,000。
要计算两个pcap-ng数据包的时间戳之间的差异,取时间戳值之间的差异;这是一秒的分数,其中分数由接口描述块中的指定值定义。要将其转换为毫秒,请根据分数进行适当调整(例如,如果是微秒,则将其除以 1,000)。
要计算两个 802.11 数据包的 TSFT 值之间的差异,只需从另一个值中减去一个值即可; TSFT 值,至少对于 radiotap,以微秒为单位,因此,要将其转换为毫秒,请将其除以 1,000。
【讨论】:
【参考方案2】:“Epoch”不是单位或格式;这是一个时间点。具体来说,它是 1970 年 1 月 1 日的午夜 UTC。
Unix timestamps 只是从那时起经过的秒数。较大的减去较小的以秒为单位,然后乘以 1000 得到毫秒数。
【讨论】:
以上是关于时代和wireshark捕获的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能使用wireshark和winPcap捕获3g数据