def _set_conf_sockets(): """Populate the conf.L2Socket and conf.L3Socket according to the various use_* parameters """ from scapy.main import _load if conf.use_bpf and not BSD: Interceptor.set_from_hook(conf, "use_bpf", False) raise ScapyInvalidPlatformException("BSD-like (OSX, *BSD...) only !") if not conf.use_pcap and SOLARIS: Interceptor.set_from_hook(conf, "use_pcap", True) raise ScapyInvalidPlatformException( "Scapy only supports libpcap on Solaris !") # we are already in an Interceptor hook, use Interceptor.set_from_hook if conf.use_pcap: try: from scapy.arch.pcapdnet import L2pcapListenSocket, L2pcapSocket, \ L3pcapSocket except (OSError, ImportError): warning("No libpcap provider available ! pcap won't be used") Interceptor.set_from_hook(conf, "use_pcap", False) else: conf.L3socket = L3pcapSocket conf.L3socket6 = functools.partial(L3pcapSocket, filter="ip6") conf.L2socket = L2pcapSocket conf.L2listen = L2pcapListenSocket # Update globals _load("scapy.arch.pcapdnet") return if conf.use_bpf: from scapy.arch.bpf.supersocket import L2bpfListenSocket, \ L2bpfSocket, L3bpfSocket conf.L3socket = L3bpfSocket conf.L3socket6 = functools.partial(L3bpfSocket, filter="ip6") conf.L2socket = L2bpfSocket conf.L2listen = L2bpfListenSocket # Update globals _load("scapy.arch.bpf") return if LINUX: from scapy.arch.linux import L3PacketSocket, L2Socket, L2ListenSocket conf.L3socket = L3PacketSocket conf.L3socket6 = functools.partial(L3PacketSocket, filter="ip6") conf.L2socket = L2Socket conf.L2listen = L2ListenSocket # Update globals _load("scapy.arch.linux") return if WINDOWS: from scapy.arch.windows import _NotAvailableSocket from scapy.arch.windows.native import L3WinSocket, L3WinSocket6 conf.L3socket = L3WinSocket conf.L3socket6 = L3WinSocket6 conf.L2socket = _NotAvailableSocket conf.L2listen = _NotAvailableSocket # No need to update globals on Windows return from scapy.supersocket import L3RawSocket from scapy.layers.inet6 import L3RawSocket6 conf.L3socket = L3RawSocket conf.L3socket6 = L3RawSocket6
def _set_conf_sockets(): """Populate the conf.L2Socket and conf.L3Socket according to the various use_* parameters """ if conf.use_bpf and not BSD: Interceptor.set_from_hook(conf, "use_bpf", False) raise ScapyInvalidPlatformException("BSD-like (OSX, *BSD...) only !") if conf.use_winpcapy and not WINDOWS: Interceptor.set_from_hook(conf, "use_winpcapy", False) raise ScapyInvalidPlatformException("Windows only !") # we are already in an Interceptor hook, use Interceptor.set_from_hook if conf.use_pcap or conf.use_dnet or conf.use_winpcapy: try: from scapy.arch.pcapdnet import L2pcapListenSocket, L2pcapSocket, \ L3pcapSocket except ImportError: warning("No pcap provider available ! pcap won't be used") Interceptor.set_from_hook(conf, "use_winpcapy", False) Interceptor.set_from_hook(conf, "use_pcap", False) else: conf.L3socket = L3pcapSocket conf.L3socket6 = functools.partial(L3pcapSocket, filter="ip6") conf.L2socket = L2pcapSocket conf.L2listen = L2pcapListenSocket return if conf.use_bpf: from scapy.arch.bpf.supersocket import L2bpfListenSocket, \ L2bpfSocket, L3bpfSocket conf.L3socket = L3bpfSocket conf.L3socket6 = functools.partial(L3bpfSocket, filter="ip6") conf.L2socket = L2bpfSocket conf.L2listen = L2bpfListenSocket return if LINUX: from scapy.arch.linux import L3PacketSocket, L2Socket, L2ListenSocket conf.L3socket = L3PacketSocket conf.L3socket6 = functools.partial(L3PacketSocket, filter="ip6") conf.L2socket = L2Socket conf.L2listen = L2ListenSocket return if WINDOWS: from scapy.arch.windows import _NotAvailableSocket from scapy.arch.windows.native import L3WinSocket, L3WinSocket6 conf.L3socket = L3WinSocket conf.L3socket6 = L3WinSocket6 conf.L2socket = _NotAvailableSocket conf.L2listen = _NotAvailableSocket return from scapy.supersocket import L3RawSocket from scapy.layers.inet6 import L3RawSocket6 conf.L3socket = L3RawSocket conf.L3socket6 = L3RawSocket6
def __init__(self, iface_name, peer_name): # type: (str, str) -> None if not LINUX: # ToDo: do we need a kernel version check here? raise ScapyInvalidPlatformException( 'Virtual Ethernet interface pair only available on Linux') self.ifaces = [iface_name, peer_name]
def _set_conf_sockets(): """Populate the conf.L2Socket and conf.L3Socket according to the various use_* parameters """ if conf.use_bpf and not DARWIN: Interceptor.set_from_hook(conf, "use_bpf", False) raise ScapyInvalidPlatformException("Darwin (OSX) only !") if conf.use_winpcapy and not WINDOWS: Interceptor.set_from_hook(conf, "use_winpcapy", False) raise ScapyInvalidPlatformException("Windows only !") # we are already in an Interceptor hook, use Interceptor.set_from_hook if conf.use_pcap or conf.use_dnet or conf.use_winpcapy: try: from scapy.arch.pcapdnet import L2pcapListenSocket, L2pcapSocket, \ L3pcapSocket except ImportError: warning("No pcap provider available ! pcap won't be used") Interceptor.set_from_hook(conf, "use_winpcapy", False) Interceptor.set_from_hook(conf, "use_pcap", False) else: conf.L2listen = L2pcapListenSocket conf.L2socket = L2pcapSocket conf.L3socket = L3pcapSocket return if conf.use_bpf: from scapy.arch.bpf.supersocket import L2bpfListenSocket, \ L2bpfSocket, L3bpfSocket conf.L2listen = L2bpfListenSocket conf.L2socket = L2bpfSocket conf.L3socket = L3bpfSocket return if LINUX: from scapy.arch.linux import L3PacketSocket, L2Socket, L2ListenSocket conf.L3socket = L3PacketSocket conf.L2socket = L2Socket conf.L2listen = L2ListenSocket return if WINDOWS: # Should have been conf.use_winpcapy from scapy.arch.windows import _NotAvailableSocket conf.L2socket = _NotAvailableSocket conf.L2listen = _NotAvailableSocket conf.L3socket = _NotAvailableSocket return from scapy.supersocket import L3RawSocket conf.L3socket = L3RawSocket
--- scapy/config.py.orig 2019-01-10 18:33:08 UTC +++ scapy/config.py @@ -16,7 +16,7 @@ import socket import sys from scapy import VERSION, base_classes -from scapy.consts import DARWIN, WINDOWS, LINUX +from scapy.consts import BSD, DARWIN, WINDOWS, LINUX from scapy.data import ETHER_TYPES, IP_PROTOS, TCP_SERVICES, UDP_SERVICES, \ MANUFDB from scapy.error import log_scapy, warning, ScapyInvalidPlatformException @@ -431,9 +431,9 @@ def _set_conf_sockets(): """Populate the conf.L2Socket and conf.L3Socket according to the various use_* parameters """ - if conf.use_bpf and not DARWIN: + if conf.use_bpf and not BSD: Interceptor.set_from_hook(conf, "use_bpf", False) - raise ScapyInvalidPlatformException("Darwin (OSX) only !") + raise ScapyInvalidPlatformException("BSD-like (OSX, *BSD...) only !") if conf.use_winpcapy and not WINDOWS: Interceptor.set_from_hook(conf, "use_winpcapy", False) raise ScapyInvalidPlatformException("Windows only !")