0

我在 Windows 11 上使用 scapy 2.4.5 和 Python 3.9.5。我安装了 npcap 版本 1.55。

我有一些 Wireshark 数据包捕获,我试图在文件上使用 scapy 的嗅探功能并过滤掉各种数据包。

但是,当我将 filter="udp" 与嗅探一起使用时,我得到一个关于 tcpdump 不可用的异常。

下面是我目前正在尝试使用的脚本。

from scapy.all import *


conf.use_pcap = True

pcap_file_path = r"C:\8OCT21_DDL_00001_20211008214804"

packets = sniff(offline=pcap_file_path, 
                count=10,
                filter="udp")
packets.summary()

但是我得到了这个例外:

File "C:\Python39\lib\site-packages\scapy\sendrecv.py", line 1263, in sniff
    sniffer._run(*args, **kwargs)
  File "C:\Python39\lib\site-packages\scapy\sendrecv.py", line 1072, in _run
    sniff_sockets.update((PcapReader(
  File "C:\Python39\lib\site-packages\scapy\sendrecv.py", line 1074, in <genexpr>
    tcpdump(fname,
  File "C:\Python39\lib\site-packages\scapy\utils.py", line 2095, in tcpdump
    raise Scapy_Exception(
scapy.error.Scapy_Exception: tcpdump is not available

关于如何在 Windows 上使用 npcap 而不是 tcpdump 使用 scapy 嗅探的任何想法?

4

1 回答 1

0

问题不在于您的过滤器,而在于嗅探功能中的“离线”选项。您可以执行数据包的实时嗅探,或使用 rdpcap() 函数首先将 pcap 加载到 RAM 中,然后执行您想要执行的操作。

from scapy.all import rdpcap
from scapy.layers.inet import UDP

scapy_cap = rdpcap("responses.pcap")
for pck in PCAP:
    if pck[UDP]:
        print(pck.summary())

这不是解决它为什么会引发 tcpdump 异常的解决方案,而是更多从 pcap 中获取某些东西的解决方法。请记住,如果您尝试使用 rdpcap() 加载大型 pcap 文件,它们会像其他任何东西一样占用 RAM。

于 2022-03-02T10:13:28.693 回答