Я использую Scapy для скрипта, который будет работать как на Windows, так и на Linux. Сценарий прекрасно работает под Linux, но, следуя документации Scapy для Windows, я получаю сообщение об ошибке: OSError: Could not activate the pcap handler.
Я уже установил Ncpcap с возможностью мониторинга raw 802.11 на беспроводном адаптере, и включил устаревшую поддержку winpcap API. В коде я уже поместил conf.use_pcap = True
и conf.sniff_promisc=False
, а также monitoring=True
при создании сокета.
Вот мой код:
import socket
import errno
import threading
from scapy import plist
from scapy.all import Raw
from scapy.config import conf
from scapy.data import ETH_P_ALL, MTU
from scapy.consts import WINDOWS
from scapy.layers.inet import IP
from select import select
def sniff(action=None, lfilter=None, stop_event=None, refresh=0.1, store=False, *args, **kwargs):
l2socket = conf.L2listen
if WINDOWS:
conf.sniff_promisc=False
conf.use_pcap = True
s = l2socket(type=ETH_P_ALL, monitor=True, *args, **kwargs)
def _select(sockets):
return sockets
else:
s = l2socket(type=ETH_P_ALL, *args, **kwargs)
def _select(sockets):
try:
return select(sockets, [], [], refresh)[0]
except OSError as exc:
if exc.errno == errno.EINTR:
return []
raise
try:
while True:
if stop_event and stop_event.is_set():
break
sel = _select([s])
if s in sel:
p = s.recv(MTU)
if p is None:
break
action(p)
except KeyboardInterrupt:
pass
finally:
# Sniffer has finished
s.close()