【入门篇】用 python 抓取windows系统的网络数据

文章目录

  • 一、npcap 了解和安装
  • 1.1 npcap 是什么软件
  • 1.2 安装 npcap
  • 1)下载 Npcap:
  • 2)安装 Npcap
  • 1.3 验证 Npcap
  • 1.4 使用 Npcap
  • 二、python 抓取网络数据
  • 2.1 使用 Scapy
  • 2.2 使用 Layer 3 socket
  • 总结
  • 参考文档
  • Windows 上使用 Scapy 模块进行数据包捕获时,缺少必要的网络捕获库(如 WinPcap 或 Npcap)。

    一、npcap 了解和安装

    1.1 npcap 是什么软件

    Npcap 是一款在 Windows 平台上使用的网络数据包捕获库和驱动程序。它采用‌Microsoft Light-Weight Filter (NDIS 6 LWF)技术和Windows Filtering Platform (NDIS 6 WFP)技术,提供了原始数据包捕获、过滤和发送等功能。Npcap与WinPcap可以共存,但Npcap提供了更现代的API和更好的性能,是网络监控和数据分析领域的必备工具。‌
    功能和特点

  • 原始数据包捕获‌:Npcap可以捕获原始数据包,包括发往运行机器的原始数据包和与其他主机交换的原始数据包。
  • 数据包过滤‌:根据用户指定的规则对数据包进行过滤。
  • 数据包发送‌:将原始数据包发送到网络。
  • 统计信息收集‌:收集网络上的流量统计信息。
  • 高兼容性‌:Npcap与WinPcap可以共存,但Npcap提供了更现代的API和更好的性能。
  • 安全性‌:Npcap提供了更高的安全性,适用于网络监控和数据分析领域。
  • 1.2 安装 npcap

    Npcap 是 Scapy 推荐的在 Windows 上使用的库,可以代替 WinPcap。请通过以下步骤进行安装:

    1)下载 Npcap:

    访问 Npcap 地址 并下载最新的 Npcap 安装程序。

    2)安装 Npcap

  • 运行下载的安装程序,并在安装过程中确保选择了 “Install Npcap in WinPcap API-compatible Mode” 选项。此选项将确保 Npcap 可以与使用 WinPcap 的程序兼容。
  • 如果电脑带有无线网卡,记得勾选“support raw 802.11 traffic(and monitor mode) for wireless adapters”。
  • 如果电脑已经安装过 winpcap 软件,在安装 Npcap 时会弹窗提示卸载 Winpcap,此时需要关闭 wireshark 或是其它相关的软件
  • 1.3 验证 Npcap

    通过以下命令(以管理员身份运行)中检查 Npcap 服务的状态:

    sc query npcap
    

    如果服务未启动,用以下命令启动:

    sc start npcap
    

    1.4 使用 Npcap

    Npcap 提供了多种使用方式,包括命令行工具和编程接口。
    1)命令行工具:可以帮助您捕获和分析网络流量。以下是一些常用的命令行工具:

  • -npcap.exe:用于启动Npcap的命令行界面,可以执行各 种操作,如捕获流量、导出流量等。
  • -windump.exe:类似于Unix系统上的tcpdump工具,用于 捕获和显示网络流量。
  • -pcap2xml.exe:将pcap文件转换为XML格式,方便进一 步分析和处理。
  • 2)编程接口:可以与其他应用程序集成使用。以下是一些常用的编程接口:

  • -Npcap API:使用C语言编写的原生API,可以在自己的应 用程序中直接调用。
  • -WinPcap兼容模式:Npcap兼容WinPcap API,因此可以使 用现有的WinPcap应用程序和库。
  • 二、python 抓取网络数据

    2.1 使用 Scapy

    安装完 Npcap 后,可以运行 Scapy 代码。确保在使用 sniff 函数时,没有使用任何会向 Layer 2 嵌套调用的选项。

    from scapy.all import sniff
    
    packets_received = 0
    
    # 捕获数据包的回调函数
    def packet_callback(packet):
        global packets_received
        packets_received += 1
          
    # 主监控循环
    def main():
    	# 捕获数据包,无需存储 并调用 packet_callback 回调函数处理每个捕获的数据包
        sniff(prn=packet_callback, store=0)  
        print(f"已接收数据包: {packets_received}")
    
    if __name__ == "__main__":
        main()
    

    2.2 使用 Layer 3 socket

    如果出于某种原因您不想使用 Npcap,您可以使用 Scapy 的 Layer 3 socket 功能,通过使用 TCP/IP 层来捕获数据包,而不是直接从 Layer 2 捕获:

    from scapy.all import conf
    
    # 设置使用 Layer 3 socket
    conf.L3socket = L3SocketRaw
    
    # 现在可以继续使用 sniff 函数
    sniff(prn=packet_callback, store=0)
    
    

    总结

    最推荐的方法是安装 Npcap,它是 Scapy 兼容薄弱最强的 WinPcap 的替代方案。

    参考文档

    https://blog.csdn.net/m0_63997099/article/details/135972056
    https://blog.csdn.net/jacke121/article/details/139371912
    https://wenku.baidu.com/view/a845cd99a000a6c30c22590102020740be1ecde2.html?wkts=1729665166346&bdQuery=Npcap%E5%AE%89%E8%A3%85%E5%AE%8C%E5%90%8E%E5%8E%BB%E5%93%AA%E4%BA%86&needWelcomeRecommand=1

    作者:佚名猫

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【入门篇】用 python 抓取windows系统的网络数据

    发表回复