使用 python scapy 捕获 Windows 中的网络流量

Using python scapy to capture network traffic in windows

提问人:gc75 提问时间:10/17/2023 更新时间:10/17/2023 访问量:41

问:

大家早上好,

我正在尝试用 python 编写一个脚本,该脚本使用 scapy 在 Windows 11 环境中执行数据包捕获。

如果我使用,脚本将启动:

packet = scapy.sniff(iface=None, timeout=duration, filter="tcp")

但它不记录任何内容。

如果我改用,我在打开界面时会出现错误。packet = scapy.sniff(iface=if_to_sniff, timeout=duration, filter="tcp")

这是我完整的测试脚本。

import os
import scapy.all as scapy


def sniff_traffic(filename, duration):
    intrf = scapy.get_if_list()

    intrf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "intrf.txt")
    with open(intrf_path, "w") as f:
        for item in intrf:
            f.write(f"{item}\n")

    if_to_sniff = scapy.get_if_list()[0]

    writer = scapy.PcapWriter(filename)

    while True:
        packet = scapy.sniff(iface=if_to_sniff, timeout=duration, filter="tcp")
        if packet is None:
            break

        writer.write(packet)

if __name__ == "__main__":
    unique_code = "a425c5a1-c788-43db-ae2a-cb9be6e7cc6f"
    pcap_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "packets.pcap")
    intrf_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents", unique_code, "intrf.txt")
    duration = 5

    sniff_traffic(pcap_path, duration)

谁能给我任何建议?

如何在 Windows 11 上将 Scapy 与 python 一起使用

Python scapy 数据包嗅探器 sniffing

评论


答:

0赞 Guapi-zh 10/17/2023 #1

您提到的问题可能无法捕获数据包,因为它默认为第一个可用的网络接口。应明确指定要捕获的网络接口。您可以使用 查看可用的接口,然后选择适当的接口。iface=Nonescapy.get_if_list()

您可以像以前一样使用可用接口,但请确保根据您的要求选择正确的接口。get_if_list()