【入门篇】用 python 抓取windows系统的网络数据
文章目录
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和更好的性能,是网络监控和数据分析领域的必备工具。
功能和特点
1.2 安装 npcap
Npcap 是 Scapy 推荐的在 Windows 上使用的库,可以代替 WinPcap。请通过以下步骤进行安装:
1)下载 Npcap:
访问 Npcap 地址 并下载最新的 Npcap 安装程序。
2)安装 Npcap

1.3 验证 Npcap
通过以下命令(以管理员身份运行)中检查 Npcap 服务的状态:
sc query npcap
如果服务未启动,用以下命令启动:
sc start npcap
1.4 使用 Npcap
Npcap 提供了多种使用方式,包括命令行工具和编程接口。
1)命令行工具:可以帮助您捕获和分析网络流量。以下是一些常用的命令行工具:
2)编程接口:可以与其他应用程序集成使用。以下是一些常用的编程接口:
二、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
作者:佚名猫