Source code for boofuzz.connections.socket_connection

import warnings

from boofuzz import exception
from boofuzz.connections import (
    raw_l2_socket_connection,
    raw_l3_socket_connection,
    ssl_socket_connection,
    tcp_socket_connection,
    udp_socket_connection,
)

_PROTOCOLS = ["tcp", "ssl", "udp", "raw-l2", "raw-l3"]
_PROTOCOLS_PORT_REQUIRED = ["tcp", "ssl", "udp"]


[docs] def SocketConnection( host, port=None, proto="tcp", bind=None, send_timeout=5.0, recv_timeout=5.0, ethernet_proto=None, l2_dst=b"\xFF" * 6, udp_broadcast=False, server=False, sslcontext=None, server_hostname=None, ): """ITargetConnection implementation using sockets. Supports UDP, TCP, SSL, raw layer 2 and raw layer 3 packets. .. note:: SocketConnection is deprecated and will be removed in a future version of Boofuzz. Use the classes derived from :class:`BaseSocketConnection <boofuzz.connections.BaseSocketConnection>` instead. .. versionchanged:: 0.2.0 SocketConnection has been moved into the connections subpackage. The full path is now boofuzz.connections.socket_connection.SocketConnection .. deprecated:: 0.2.0 Use the classes derived from :class:`BaseSocketConnection <boofuzz.connections.BaseSocketConnection>` instead. Examples:: tcp_connection = SocketConnection(host='127.0.0.1', port=17971) udp_connection = SocketConnection(host='127.0.0.1', port=17971, proto='udp') udp_connection_2_way = SocketConnection(host='127.0.0.1', port=17971, proto='udp', bind=('127.0.0.1', 17972) udp_broadcast = SocketConnection(host='127.0.0.1', port=17971, proto='udp', bind=('127.0.0.1', 17972), udp_broadcast=True) raw_layer_2 = (host='lo', proto='raw-l2') raw_layer_2 = (host='lo', proto='raw-l2', l2_dst='\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF', ethernet_proto=socket_connection.ETH_P_IP) raw_layer_3 = (host='lo', proto='raw-l3') Args: host (str): Hostname or IP address of target system, or network interface string if using raw-l2 or raw-l3. port (int): Port of target service. Required for proto values 'tcp', 'udp', 'ssl'. proto (str): Communication protocol ("tcp", "udp", "ssl", "raw-l2", "raw-l3"). Default "tcp". raw-l2: Send packets at layer 2. Must include link layer header (e.g. Ethernet frame). raw-l3: Send packets at layer 3. Must include network protocol header (e.g. IPv4). bind (tuple (host, port)): Socket bind address and port. Required if using recv() with 'udp' protocol. send_timeout (float): Seconds to wait for send before timing out. Default 5.0. recv_timeout (float): Seconds to wait for recv before timing out. Default 5.0. ethernet_proto (int): Ethernet protocol when using 'raw-l3'. 16 bit integer. Default ETH_P_IP (0x0800) when using 'raw-l3'. See "if_ether.h" in Linux documentation for more options. l2_dst (str): Layer 2 destination address (e.g. MAC address). Used only by 'raw-l3'. Default '\xFF\xFF\xFF\xFF\xFF\xFF' (broadcast). udp_broadcast (bool): Set to True to enable UDP broadcast. Must supply appropriate broadcast address for send() to work, and '' for bind host for recv() to work. server (bool): Set to True to enable server side fuzzing. sslcontext (ssl.SSLContext): Python SSL context to be used. Required if server=True or server_hostname=None. server_hostname (string): server_hostname, required for verifying identity of remote SSL/TLS server. """ warnings.warn( "SocketConnection is deprecated and will be removed in a future version of Boofuzz. " "Use the classes derived from BaseSocketConnection instead.", FutureWarning, ) if proto not in _PROTOCOLS: raise exception.SullyRuntimeError("INVALID PROTOCOL SPECIFIED: %s" % proto) if proto in _PROTOCOLS_PORT_REQUIRED and port is None: raise ValueError("__init__() argument port required for protocol {0}".format(proto)) if proto == "udp": return udp_socket_connection.UDPSocketConnection( host, port, send_timeout, recv_timeout, server, bind, udp_broadcast ) elif proto == "tcp": return tcp_socket_connection.TCPSocketConnection(host, port, send_timeout, recv_timeout, server) elif proto == "ssl": return ssl_socket_connection.SSLSocketConnection( host, port, send_timeout, recv_timeout, server, sslcontext, server_hostname ) elif proto == "raw-l2": return raw_l2_socket_connection.RawL2SocketConnection(host, send_timeout, recv_timeout) elif proto == "raw-l3": if ethernet_proto is None: ethernet_proto = raw_l3_socket_connection.ETH_P_IP return raw_l3_socket_connection.RawL3SocketConnection(host, send_timeout, recv_timeout, ethernet_proto, l2_dst)