- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我收到以下代码的 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格式:
如果您打开 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/
我正在使用 dpkt 来解析一些 ieee80211 数据包。 我看到创建的 ieee80211 对象有错误的值。 深入挖掘,我发现 ieee80211 将数据视为大端,而实际上我提供的数据包是小端。
我有一个问题。 如何通过对 pcap 文件中的每个主机名使用 dpkt 库和 ts 来获得 GET 和 HTTP/1.0 200 OK 之间的响应时间差(我的意思是网络服务器的时间延迟)? 我的初步代
我正在尝试创建一个 Python 脚本,我在其中解析 pcap 文件并将流量突发性测量到亚毫秒级。问题是 dpkt 提供的时间戳似乎没有提供足够好的分辨率。以下脚本 #!/usr/bin/python
所以我试图创建自己的 pcap 文件,我使用 dpkt 创建了一个 msg,但我不明白如何操纵时间戳,从我所看到的来看,它是 writepkt 中的第三个参数,但我不知道了解如何初始化变量..这是我代
我正在使用 dpkt python 模块来解析 pcap 文件。我对数据包进行了足够深入的研究,其中一些数据被表示为字节流。我可以很容易地从常规字节字符串进行转换,但是某些字节字符串显示为: \t\x
我正在尝试从一开始就使用 Python 的 Scapy 来分析数据包。通过最近的搜索,我发现在 python 中还有一个名为 dpkt 的模块。使用此模块,我可以解析数据包的层、创建数据包、读取 .p
如何解析 ICMP 数据包(使用 dpkt)来检查它是从 A 到 B 的请求还是响应? 我找到了一些 TCP 和 UDP 数据包的示例(如下),但我找不到 IP 数据包的任何内容。 import dp
我正在尝试使用 dpkt 从 pcap 数据包中获取 ipv6 扩展 header 并将其打印出来。但由于某种原因它不起作用。我尝试了很多不同的方法。这是导致问题的代码部分。有人知道如何解决这个问题吗
我想从 pcap 文件中打印出数据包数据。下面的代码将数据包数据存储在一个数组中,但我不知道如何打印数组的每个元素,然后从那里拆分数据。数组上的 for 循环只返回一个错误。 import dpkt
我正在尝试使用可用的 dpkt 库 here 从 pcap 文件生成所有域名及其相应 IP 地址的列表 我的代码主要基于 this filename = raw_input('Type filenam
我有一个实验室,我需要为一个巨大的 pcap 文件的每个数据包找到协议(protocol)。我打算制作一本字典来保存它们,但我的第一步只是使用 dpkt 提取信息。看起来 ip.get_proto 是
我有一个实验室,我需要为一个巨大的 pcap 文件的每个数据包找到协议(protocol)。我打算制作一本字典来保存它们,但我的第一步只是使用 dpkt 提取信息。看起来 ip.get_proto 是
我正在尝试在 python 3 上安装 dpkt,但在安装时出现以下错误: (venv)[root@miura dpkt-1.8]# python setup.py install Traceback
我有这个 python 代码: import sys import dpkt f = file("pcaop.Pcap") pcap = dpkt.pcap.Reader(f) i = 0 for t
我已将 Cisco 路由器配置为转储 pcap 文件以获取我尝试使用 dpkt 和 Python (2.7) 解析的特定接口(interface)上的流量。基本代码是: f = open('pktra
我正在使用 dpkt 解析 pcap 文件,但是我对如何提取目标 IP 地址感到困惑。我正在使用 eth = dpkt.ethernet.Ethernet(buf) 解析数据包,它返回一个以太网对象,
我收到以下代码的 ValueError: Invalid tcpdump header error。任何帮助表示赞赏 import dpkt f = open('a.pcap') pcap = dpk
我正在尝试使用 dpkt 模块解析先前捕获的 HTTP header 跟踪: import dpkt import sys f=file(sys.argv[1],"rb") pcap=dpkt.pca
我在我的机器上运行此代码时遇到问题,但它在我学校的 linux 机器上运行良好。 我得到的错误是: Traceback (most recent call last): File "wireshar
我有一个 python 脚本,它使用 dpkt 捕获以太网上的数据包,但我如何区分哪些数据包是 tcp,哪些是 udp。 最终,我希望获得在时间间隔内建立的每个 tcp 连接的数据包列表。 我的代码是
我是一名优秀的程序员,十分优秀!