最近参照网上的 scapy 库的使用方法写了一个用于抓取所有数据包的脚本,一开始一切正常,但是后来为了测试没有安装驱动的情况下可以输出需要安装驱动,而不是直接报错,于是把 npcap 驱动反复安装卸载多次,就遇到了这个问题:
电脑在连着无线网的时候脚本就抓不到数据包,但是连着有线网就可以抓到。与此同时,wireshark 却一切正常,无论是无线还是有线都可以抓到包。
之后尝试了
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)
1
disk 2021-01-27 16:08:27 +08:00
。。。你有指定哪个网络接口吗
|
2
EtherShark OP @disk 没有指定网络接口,我看 scapy 的 sniff()函数的介绍,如果不指定 iface 的话,默认是抓取所有网卡的数据包,而且在我反复卸载之前,也是可以抓到数据包的。并且相同的代码,放到另一台只有有线网卡的设备上,是可以正常捕获数据包的。
另外,我下午找到的一个“解决方法”,通过迭代 IFACES.data.items() 获取到所有网卡名字,并放到 list 里,传给 sniff 的 iface 。 目前的情况是,可以抓到数据包了,但是相比 wireshark 抓包的结果看,漏抓了数量巨大的数据包,基本上单位时间,能差出去 4-6 倍的数据包,导致抓到的结果完全不具备参考价值。 |