def recv(self, max_bytes): """ Receive up to max_bytes data from the target. Args: max_bytes (int): Maximum number of bytes to receive. Returns: Received data. """ data = b"" try: data = self._sock.recv(max_bytes) except socket.timeout: data = b"" except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif (e.errno == errno.ECONNRESET) or (e.errno == errno.ENETRESET) or (e.errno == errno.ETIMEDOUT): raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) elif e.errno == errno.EWOULDBLOCK: # timeout condition if using SO_RCVTIMEO or SO_SNDTIMEO data = b"" else: raise return data
def send(self, data): """ Send data to the target. Only valid after calling open! Data will be trunctated to self.packet_size (Default: 1500 bytes). Args: data: Data to send. Returns: int: Number of bytes actually sent. """ num_sent = 0 data = data[: self.packet_size] try: num_sent = self._sock.sendto(data, (self.interface, self.ethernet_proto, 0, 0, self.l2_dst)) except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT, errno.EPIPE]: raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) else: raise return num_sent
def send(self, data): """ Send data to the target. Only valid after calling open! Args: data: Data to send. Returns: int: Number of bytes actually sent. """ num_sent = 0 try: num_sent = self._sock.send(data) except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT, errno.EPIPE]: raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) else: raise return num_sent
def recv(self, max_bytes): """ Receives a packet from the raw socket. If max_bytes < packet_size, only the first max_bytes are returned and the rest of the packet is discarded. Otherwise, return the whole packet. Args: max_bytes (int): Maximum number of bytes to return. 0 to return the whole packet. Returns: Received data """ data = b"" try: data = self._sock.recv(self.packet_size) if 0 < max_bytes < self.packet_size: data = data[: self.packet_size] except socket.timeout: data = b"" except socket.error as e: if e.errno == errno.ECONNABORTED: raise exception.BoofuzzTargetConnectionAborted( socket_errno=e.errno, socket_errmsg=e.strerror ).with_traceback(sys.exc_info()[2]) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT]: raise exception.BoofuzzTargetConnectionReset().with_traceback(sys.exc_info()[2]) elif e.errno == errno.EWOULDBLOCK: data = b"" else: raise return data
def send(self, data): """ Send data to the target. Only valid after calling open! Data will be trunctated to self.max_send_size (Default: 1514 bytes). Args: data: Data to send. Returns: int: Number of bytes actually sent. """ num_sent = 0 data = data[:self.max_send_size] try: num_sent = self._sock.send(data) except socket.error as e: if e.errno == errno.ECONNABORTED: raise exception.BoofuzzTargetConnectionAborted( socket_errno=e.errno, socket_errmsg=e.strerror).with_traceback(sys.exc_info()[2]) elif e.errno in [ errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT, errno.EPIPE ]: raise exception.BoofuzzTargetConnectionReset().with_traceback( sys.exc_info()[2]) else: raise return num_sent
def recv(self, max_bytes): """Receive up to max_bytes data from the target. Args: max_bytes(int): Maximum number of bytes to receive. Returns: Received data. """ data = b"" try: if self.bind or self.server: data, self._udp_client_port = self._sock.recvfrom(max_bytes) else: raise exception.SullyRuntimeError( "UDPSocketConnection.recv() requires a bind address/port." " Current value: {}".format(self.bind) ) except socket.timeout: data = b"" except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT]: raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) elif e.errno == errno.EWOULDBLOCK: data = b"" else: raise return data
def send(self, data): """ Send data to the target. Only valid after calling open! Some protocols will truncate; see self.MAX_PAYLOADS. Args: data: Data to send. Returns: int: Number of bytes actually sent. """ num_sent = 0 try: if self.server: if self._udp_client_port is None: raise exception.BoofuzzError("recv() must be called before send with udp fuzzing servers.") num_sent = self._sock.sendto(data, self._udp_client_port) else: num_sent = self._sock.sendto(data, (self.host, self.port)) except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT, errno.EPIPE]: raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) else: raise return num_sent
def recv(self, max_bytes): """ Receives a packet from the raw socket. If max_bytes < mtu, only the first max_bytes are returned and the rest of the packet is discarded. Otherwise, return the whole packet. Args: max_bytes (int): Maximum number of bytes to return. 0 to return the whole packet. Returns: Received data """ if self.ethernet_proto is None: raise Exception( "Receiving on Raw Layer 2 sockets is only supported if the socket " "is bound to an interface and protocol." ) data = b"" try: data = self._sock.recv(self.mtu) if 0 < len(data) < max_bytes: data = data[:max_bytes] except socket.timeout: data = b"" except socket.error as e: if e.errno == errno.ECONNABORTED: raise_( exception.BoofuzzTargetConnectionAborted(socket_errno=e.errno, socket_errmsg=e.strerror), None, sys.exc_info()[2], ) elif e.errno in [errno.ECONNRESET, errno.ENETRESET, errno.ETIMEDOUT]: raise_(exception.BoofuzzTargetConnectionReset(), None, sys.exc_info()[2]) elif e.errno == errno.EWOULDBLOCK: data = b"" else: raise return data