因此,在C中,从Pcap文件中读取数据时,您可以使用C libpcap库获取与全局头相关的所有信息:
typedef struct pcap_hdr_s {
guint32 magic_number; /* magic number */
guint16 version_major; /* major version number */
guint16 version_minor; /* minor version number */
gint32 thiszone; /* GMT to local correction */
guint32 sigfigs; /* accuracy of timestamps */
guint32 snaplen; /* max length of captured packets, in octets */
guint32 network; /* data link type */
} pcap_hdr_t;
因此,我已经搜索了很长时间,但没有找到如何在python库Scapy / Kamene中找到这些变量的方法。
有人可以告诉我Scapy / Kamene的示例代码,它将帮助我找到所有这些变量,或者至少是找到所有这些变量的方式?
截至撰写本文时,这在Scapy中是不可能的。您仍然可以使用python来做到这一点,尽管可以将其读取为字节结构:
import struct
with open("temp.pcap", "rb") as f:
filebytes = f.read()
pcap_headers = struct.unpack("<IHHIIII", filebytes[:24])
print(pcap_headers)
---
(2712847316, 2, 4, 0, 0, 524288, 1)
[这里,对于macOS系统上的Little-endian,我们使用<
解压缩(对于big-endian,我们使用>
解压缩)。 H
读取4个字节,而I
读取2个字节。您可以在Python3 struct documentation中阅读有关格式字符的更多信息。我们可以轻松地检查幻数:
>>> int(str("A1B2C3D4"), 16)
2712847316
看来这确实是带有正确魔术数字的pcap。对于幻数字节顺序的恶作剧,请查看此SO answer(可以有多个正确的pcap“幻数”)。