文章目录
- [一、npcap 了解和安装](#一、npcap 了解和安装)
-
- [1.1 npcap 是什么软件](#1.1 npcap 是什么软件)
- [1.2 安装 npcap](#1.2 安装 npcap)
-
- [1)下载 Npcap:](#1)下载 Npcap:)
- [2)安装 Npcap](#2)安装 Npcap)
- [1.3 验证 Npcap](#1.3 验证 Npcap)
- [1.4 使用 Npcap](#1.4 使用 Npcap)
- [二、python 抓取网络数据](#二、python 抓取网络数据)
-
- [2.1 使用 Scapy](#2.1 使用 Scapy)
- [2.2 使用 Layer 3 socket](#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 服务的状态:
bash
sc query npcap
如果服务未启动,用以下命令启动:
bash
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 嵌套调用的选项。
bash
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 捕获:
bash
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