【发布时间】:2023-03-10 12:47:01
【问题描述】:
我从 pcap 数据包头中提取前 4 个字节,它应该代表秒数。它们在 ByteStream 中按出现顺序排列(我使用的是 Haskell):
\192 (192)
\166 (166)
x (120)
SOH (01) (Start of Header)
我的理解是这四个字节可以读取为 32 位整数。然而,SOH 的存在让我很反感。如果我将 4 个字节解释为一个整数,我得到 20 亿,这是无效的(20 亿秒 = 63 年 => 无效,因为 UNIX 时代始于 1970 年,大约 45 年前)。
数据包头也以 NUL (00) 结尾。
我也不确定为什么四个字节被颠倒了,这可能是我如何从流中提取字节的副作用(使用 Get 函数和 getInt32)。 SOH不应该放在第一位吗?
【问题讨论】:
-
PCAP 可能是大端(“网络”顺序)还是小端?检查您的库中是否有
getInt32BE或LE。 -
实际上有一个有用的博客遍历格式,由编写 Haskell 解析器的人推动 - kroosec.com/2012/10/a-look-at-pcap-file-format.html
标签: haskell pcap packet-capture packet-sniffers packets