def load_scapy(isotp=True, uds=False): ''' Initializes scapy for the use within the custom ansible module. Loads needed scapy modules and makes them directly available in the global namespace. ''' global ISOTPSOCKET_IS_NATIVE if not __INIT: raise RuntimeError("init() was not called") if (WINDOWS): debug( "Platform is Windows -> CANSocket is python-can, ISOTPSocket is ISOTPSoftSocket" ) conf.contribs['CANSocket'] = {'use-python-can': True} conf.contribs['ISOTP'] = {'use-can-isotp-kernel-module': False} elif (LINUX): debug("Platform is Linux -> CANSocket is native") conf.contribs['CANSocket'] = {'use-python-can': False} if (__linux_kernel_module_loaded('can_isotp')): debug("using can_isotp kernel module") conf.contribs['ISOTP'] = {'use-can-isotp-kernel-module': True} ISOTPSOCKET_IS_NATIVE = True else: debug("can_isotp kernel module not loaded") conf.contribs['ISOTP'] = {'use-can-isotp-kernel-module': False} ISOTPSOCKET_IS_NATIVE = False load_contrib("cansocket") load_layer("can") if (isotp): load_contrib("isotp") if (uds): load_contrib("automotive.uds") _load("scapy.utils")
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