请教一下关于使用 Python 的 scapy 库通过 npcap 驱动抓包时遇到的无法抓取无线网卡流量的问题

2021-01-27 10:10:23 +08:00
 EtherShark

最近参照网上的 scapy 库的使用方法写了一个用于抓取所有数据包的脚本,一开始一切正常,但是后来为了测试没有安装驱动的情况下可以输出需要安装驱动,而不是直接报错,于是把 npcap 驱动反复安装卸载多次,就遇到了这个问题: 电脑在连着无线网的时候脚本就抓不到数据包,但是连着有线网就可以抓到。与此同时,wireshark 却一切正常,无论是无线还是有线都可以抓到包。
之后尝试了

  1. 用 ccleaner 清理注册表;
  2. 安装 winpcap 驱动替换 npcap ;
  3. 自己去注册表搜索 npcap 字样的项,并通通删除;
  4. 去 system32 与 syswow64 目录下删除 Npcap 目录,与 wpcap.dll 和 packet.dll 文件,以及 drivers 目录下的 npcap.sys 和 npfs.sys 和 npf.sys 文件
    但是反复卸载重装后问题依然无法解决,只能抓取有线网卡的数据包,无法抓取无线网卡的数据包。 以下是代码:
from scapy.all import *
import time

def countfun(packet):
    global n 
    n += 1
    print(n)
    
if not IFACES.data:
    print("Need install npcap driver")
else:
    print("Capturing...")
    n = 0
    dpkt = sniff(prn=countfun, count=0)
    capfile = time.strftime("%Y%m%d%H%M", time.localtime()) + ".pcap"
    print(n,"packets captured")
    if n != 0:
        wrpcap(capfile, dpkt)
        print("Saved in " + capfile)
1194 次点击
所在节点    Python
2 条回复
disk
2021-01-27 16:08:27 +08:00
。。。你有指定哪个网络接口吗
EtherShark
2021-01-27 17:30:16 +08:00
@disk 没有指定网络接口,我看 scapy 的 sniff()函数的介绍,如果不指定 iface 的话,默认是抓取所有网卡的数据包,而且在我反复卸载之前,也是可以抓到数据包的。并且相同的代码,放到另一台只有有线网卡的设备上,是可以正常捕获数据包的。

另外,我下午找到的一个“解决方法”,通过迭代 IFACES.data.items() 获取到所有网卡名字,并放到 list 里,传给 sniff 的 iface 。

目前的情况是,可以抓到数据包了,但是相比 wireshark 抓包的结果看,漏抓了数量巨大的数据包,基本上单位时间,能差出去 4-6 倍的数据包,导致抓到的结果完全不具备参考价值。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748775

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX