【问题标题】:In Scapy/Kamene python, how do I find the global headers for a pcap file?在 Scapy/Kamene python 中,如何找到 pcap 文件的全局标头?
【发布时间】:2020-07-10 07:13:46
【问题描述】:

所以在 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 的示例代码,它可以帮助我找到所有这些变量,或者至少是找到所有这些变量的方法吗??

【问题讨论】:

    标签: python-3.x file scapy pcap libpcap


    【解决方案1】:

    在撰写本文时,这在 Scapy 中是不可能的。您仍然可以通过将 python 读取为字节结构来执行此操作:

    import struct
    
    LITTLE_ENDIAN = "<"
    BIG_ENDIAN = ">"
    
    with open("temp.pcap", "rb") as f:
        filebytes = f.read()
    if filebytes[:2] == b"\xa1\xb2":
        endianness = BIG_ENDIAN
    elif filebytes[:2] == b"\xd4\xc3":
        endianness = LITTLE_ENDIAN
    # pcapng is a completely different filetype and has different headers
    # It's magic number is also the same between big/little endian
    elif filebytes[:2] == b"\n\r":
        raise ValueError("This capture is a pcapng file (expected pcap).")
    else:
        raise ValueError("This capture is the wrong filetype (expected pcap.")
    
    # Endianness is < or > and is handled by checking magic number.
    pcap_headers = struct.unpack(endianness + "IHHIIII", filebytes[:24])
    print(pcap_headers)
    ---
    (2712847316, 2, 4, 0, 0, 524288, 1)
    

    在这里,我们在我的 macos 系统上使用 &lt; 为 little-endian 解包(&gt; 为 big-endian)。 H 读取 4 个字节,而 I 读取 2 个字节。您可以在 Python3 struct documentation 中阅读有关格式字符的更多信息。 我们可以轻松检查幻数:

    >>> int(str("A1B2C3D4"), 16)
    2712847316
    

    看起来这确实是一个具有正确幻数的 pcap。对于幻数字节顺序恶作剧,看看这个SO answer(可以有多个正确的pcap“幻数”)。

    感谢@Cukic0d:scapy 源代码是查看解析pcap magic numbers 的好地方。

    【讨论】:

    • 如果碰到带有自定义字节序集的 pcap,这将不起作用
    • @Cukic0d 你能更具体地说明什么不起作用吗?由于字节序和时间戳可能有不同的幻数,但结构解包(除了 )将是相同的。
    • 正是你所说的。但是如果您希望获得一些连贯的结果,那么 的选择就很重要。例如见github.com/secdev/scapy/blob/…
    • @Cukic0d 感谢您的建议!我在代码中添加了检查,并包含了您的非常相关链接。
    • 干得好。请注意,这整个事情仍然......不适用于 pcapng,但这不是重点。 Scapy 解析了这些数据,但什么也没做。我将公关一种访问它们的方法
    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 2011-11-26
    • 2019-06-29
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多