gpt4 book ai didi

python - dpkt 无效的 tcpdump header 错误

转载 作者:太空狗 更新时间:2023-10-29 22:19:09 37 4
gpt4 key购买 nike

我收到以下代码的 ValueError: Invalid tcpdump header error。任何帮助表示赞赏

import dpkt

f = open('a.pcap')
pcap = dpkt.pcap.Reader(f)

for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
tcp = ip.data

if tcp.dport == 80 and len(tcp.data) > 0:
http = dpkt.http.Request(tcp.data)
print http.uri

f.close()

错误如下所示

Traceback (most recent call last):
File "malcap.py", line 6, in <module>
pcap = dpkt.pcap.Reader(f)
File "/usr/lib/python2.7/site-packages/dpkt/pcap.py", line 104, in __init__
raise ValueError, 'invalid tcpdump header'
ValueError: invalid tcpdump header

最佳答案

由于我遇到了同样的错误,这里是问题分析。

注意:目前看来问题仅在 MacOS 上观察到,而在 Linux tcpdump 上按预期工作。

1)man tcpdump指的是pcap格式:

See pcap-savefile(5) for a description of the file format.

如果您打开 PCAP-SAVEFILE 文档,您可能会看到:

the first field in the per-file header is a 4-byte magic number, with the value 0xa1b2c3d4

2) 从 pcap.py 你可能会看到下一个:

elif self.__fh.magic != TCPDUMP_MAGIC:
raise ValueError, 'invalid tcpdump header'

3) 基于 1) 和 2) 我们可以确定该文件不是 pcap。

让我们用hexdump检查一下:

hexdump test1.pcap  0000000 0a 0d 0d 0a

这与我们的预期不同。

让我们检查一下这是否是一种新格式“pcap-ng”。来自 http://www.winpcap.org/ntar/draft/PCAP-DumpFileFormat.html接下来我们可以阅读:

Block Type: The block type of the Section Header Block is the integer corresponding to the 4-char string "\r\n\n\r" (0x0A0D0D0A).

  • 这就是我们想要的!

4) 由于我们正在使用 pylibpcap 并且不支持 pcap-ng(目前),我们需要以某种方式处理这个问题。

有两种选择:4.1) 使用editcap工具:

editcap -F libpcap -T ether test.pcapng test.pcap

4.2) 使用支持两种格式数据存储的 dumpcap 工具收集数据(旧格式使用 -P)。即:

dumpcap -P -i en0 -w test.pcap

(macbook air 机箱为 en0)

但是看起来 Apple tcpdump 实现中存在错误。

tcpdump 的 Mac OS 描述如下:

   -P     Use the pcap-ng file format when saving files.  Apple modification.

如果你运行 tcpdump(没有 -P 并且没有指定 -i 接口(interface)):

tcpdump -w test.pcap
hexdump test.pcap

您将看到 pcap-ng 格式的结果:

bash-3.2$ hexdump test.pcap  0000000 0a 0d 0d 0a

如果您使用指定接口(interface)运行 tcpdump:

tcpdump -w test.pcap -i en0

格式正确:

bash-3.2$ hexdump test.pcap  0000000 d4 c3 b2 a1 02

关于python - dpkt 无效的 tcpdump header 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23523524/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com