Beispiel #1
0
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")
Beispiel #2
0
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