Ошибка OSE: не удалось активировать обработчик pcap - PullRequest
0 голосов
/ 26 апреля 2020

Я использую 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()
...