Esempio n. 1
0
    def open(self):
        """
        Opens connection to the target. Make sure to call close!

        Returns:
            None
        """
        # Create socket
        if self.proto == "tcp" or self.proto == "ssl":
            self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        elif self.proto == "udp":
            self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            if self.bind:
                self._sock.bind(('0.0.0.0', self.bind))
            if self._udp_broadcast:
                self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,
                                      True)
        elif self.proto == "raw-l2":
            self._sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
        elif self.proto == "raw-l3":
            self._sock = socket.socket(socket.AF_PACKET, socket.SOCK_DGRAM)
        else:
            raise exception.FuzzowskiRuntimeError(
                "INVALID PROTOCOL SPECIFIED: %s" % self.proto)

        self._sock.setsockopt(
            socket.SOL_SOCKET, socket.SO_SNDTIMEO,
            _seconds_to_second_microsecond_struct(self._send_timeout))
        self._sock.setsockopt(
            socket.SOL_SOCKET, socket.SO_RCVTIMEO,
            _seconds_to_second_microsecond_struct(self._recv_timeout))

        # Connect is needed only for TCP protocols
        if self.proto == "tcp" or self.proto == "ssl":
            try:
                self._sock.settimeout(self._recv_timeout)
                self._sock.connect((self.host, self.port))
            except socket.error as e:
                if e.errno == errno.ECONNREFUSED:
                    # raise exception.FuzzowskiTargetConnectionFailedError(e.message)
                    raise exception.FuzzowskiTargetConnectionFailedError(
                        'ECONNREFUSED')
                elif e.errno == errno.EALREADY:
                    raise exception.FuzzowskiTargetConnectionFailedError(
                        'EALREADY')
                elif e.errno == errno.EINPROGRESS:
                    raise exception.FuzzowskiTargetConnectionFailedError(
                        'EINPROGRESS')
                else:
                    raise
            except OSError as e:
                raise exception.FuzzowskiTargetConnectionFailedError(
                    errno.errorcode(e.errno))

        # if SSL is requested, then enable it.
        if self.proto == "ssl":
            ssl_sock = ssl.wrap_socket(self._sock)
            # TODO: Python3 change, maybe should use a context instead of deprecated ssl.wrap_socket?
            self._sock = ssl_sock
Esempio n. 2
0
    def send_data(self, address, data, blocking=True):
        """Will handle sending data to the socket of corresponding address in the connections list."""

        try:
            for i, modifier in enumerate(self.data_modifiers):
                try:
                    data = modifier(data)

                except AttributeError:
                    print "Warning: Modifier at index {} isn't callable!".format(
                        i)

        except (TypeError, ValueError):
            print "Warning: Invalid modifier value passed!"

        print "Sending \'{}\' to socket at address \'{}\'!".format(
            data, address)

        data += "\n"

        try:
            while True:
                bytes_sent = 0

                try:
                    bytes_sent += self.connections[address]["socket"].send(
                        data[bytes_sent:])

                except socket.error as error_code:
                    if blocking:
                        print "Socket error: {}".format(
                            errno.errorcode[error_code.errno])

                        if error_code.errno in (errno.ECONNREFUSED,
                                                errno.ECONNABORTED,
                                                errno.ECONNRESET,
                                                errno.ETIMEDOUT):
                            print "Connection Error! Sending data to {} aborted! ({})".format(
                                data, errno.errorcode(error_code.errno))
                            raise ConnectionTerminated

                        if error_code.errno in (errno.EAGAIN,
                                                errno.EINPROGRESS,
                                                errno.EBUSY):
                            continue

                    else:
                        raise

                if bytes_sent == len(data):
                    return 0

        except KeyError:
            print "Warning: Address \'{}\' not found in connection list!".format(
                address)
            return 1
    def open(self):
        """
        Opens connection to the target. Make sure to call close!

        Returns:
            None
        """

        try:
            if self._active_session is False:
                self._client = telnetlib.Telnet(self.host,
                                                port=self.port,
                                                timeout=self.timeout)
                self._client.read_until(b'User name:')
                self._client.write(self.username + b'\r\n')
                self._client.read_until(b'User password:'******'\r\n')
                m = self._client.read_until(
                    b'>')  # Todo: Implementation dependant
                self._active_session = True

        except socket.error as e:
            self._active_session = False
            if e.errno == errno.ECONNREFUSED:
                # raise exception.FuzzowskiTargetConnectionFailedError(e.message)
                raise exception.FuzzowskiTargetConnectionFailedError(
                    'ECONNREFUSED')
            elif e.errno == errno.EALREADY:
                raise exception.FuzzowskiTargetConnectionFailedError(
                    'EALREADY')
            elif e.errno == errno.EINPROGRESS:
                raise exception.FuzzowskiTargetConnectionFailedError(
                    'EINPROGRESS')
            else:
                raise
        except OSError as e:
            raise exception.FuzzowskiTargetConnectionFailedError(
                errno.errorcode(e.errno))
Esempio n. 4
0
            def this_loop():
                current_data = ""
                while True:
                    try:
                        current_data += client.recv(4096)

                    except socket.error as error_code:
                        if error_code in (errno.ECONNREFUSED,
                                          errno.ECONNABORTED, errno.ECONNRESET,
                                          errno.ETIMEDOUT):
                            print "Connection Error! Receiving data from {} aborted! ({})".format(
                                address, errno.errorcode(error_code.errno))
                            return 1

                        if error_code in (errno.EAGAIN, errno.EINPROGRESS):
                            continue

                    if not current_data.endswith("\n"):
                        continue

                    break

                return current_data
Esempio n. 5
0
 def __str__(self):
     return str(self.msg) + " return errcode %s" % errno.errorcode(self.rc)
Esempio n. 6
0
 def __str__(self):
     return "{0}; return errcode: {1}".format(self.msg, errno.errorcode(self.rc))
Esempio n. 7
0
 def __str__(self):
     return str(self.msg) + " return errcode %s" % errno.errorcode(self.rc)
Esempio n. 8
0
    def send_data(self, address, data, blocking=True):
        """Will handle sending data to the socket of corresponding address in the connections list."""

        try:
            for i, modifier in enumerate(self.data_modifiers):
                try:
                    data = modifier(data)

                except AttributeError:
                    print "Warning: Modifier at index {} isn't callable!".format(i)

        except (TypeError, ValueError):
            print "Warning: Invalid modifier value passed!"

        print "Sending \'{}\' to socket at address \'{}\'!".format(data, address)

        data += "\n"

        try:
            while True:
                bytes_sent = 0

                try:
                    bytes_sent += self.connections[address]["socket"].send(data[bytes_sent:])

                except socket.error as error_code:
                    if blocking:
                        print "Socket error: {}".format(errno.errorcode[error_code.errno])

                        if error_code.errno in (
                                errno.ECONNREFUSED, errno.ECONNABORTED, errno.ECONNRESET, errno.ETIMEDOUT):
                            print "Connection Error! Sending data to {} aborted! ({})".format(data, errno.errorcode(
                                error_code.errno))
                            raise ConnectionTerminated

                        if error_code.errno in (errno.EAGAIN, errno.EINPROGRESS, errno.EBUSY):
                            continue

                    else:
                        raise

                if bytes_sent == len(data):
                    return 0

        except KeyError:
            print "Warning: Address \'{}\' not found in connection list!".format(address)
            return 1
Esempio n. 9
0
            def this_loop():
                current_data = ""
                while True:
                    try:
                        current_data += client.recv(4096)

                    except socket.error as error_code:
                        if error_code in (errno.ECONNREFUSED, errno.ECONNABORTED, errno.ECONNRESET, errno.ETIMEDOUT):
                            print "Connection Error! Receiving data from {} aborted! ({})".format(address,
                                                                                                  errno.errorcode(
                                                                                                      error_code.errno))
                            return 1

                        if error_code in (errno.EAGAIN, errno.EINPROGRESS):
                            continue

                    if not current_data.endswith("\n"):
                        continue

                    break

                return current_data