Пример #1
0
    def _hook_while_sending(self):
        "Hook running while request are sent to the tested server."
        transmit = True
        try:
            self.backend_queries = self.get_echoed_query()
        except NoServerThreadResponse:
            # well our bad query was maybe not transmitted
            inmsg('# No transmission from backend.')
            transmit = False
        if transmit:
            inmsg('# received query from backend echo.')
            inmsg(str(self.backend_queries))

            self._analyze_echo_queries()
Пример #2
0
    def _hook_while_sending(self):
        "Hook running while request are sent to the tested server."
        transmit = True
        try:
            self.backend_queries = self.get_echoed_query()
        except NoServerThreadResponse:
            # well our bad query was maybe not transmitted
            inmsg('# No transmission from backend.')
            transmit = False
        if transmit:
            inmsg('# received query from backend echo.')
            inmsg(str(self.backend_queries))

            self._analyze_echo_queries()
Пример #3
0
    def read_all(self, timeout=None, buffsize=None):
        """Read all the stream, waiting for EOS, return all responses."""
        output = ''
        if timeout is None:
            timeout = float(self.config.getint(
                'CLIENT_SOCKET_READ_TIMEOUT_MS'))
            timeout = timeout / 1000
        if buffsize is None:
            buffsize = self.config.getint('CLIENT_SOCKET_READ_SIZE')
        try:
            output = self._socket_read(timeout, buffsize)

        except socket.error as msg:
            inmsg('#<====ABORTED RESPONSE WHILE READING: {0}'.format(str(msg)))

        inmsg('# <====FINAL RESPONSE===============')
        inmsg(output)
        responses = Responses().parse(output)
        return responses
Пример #4
0
    def read_all(self, timeout=None, buffsize=None):
        """Read all the stream, waiting for EOS, return all responses."""
        output = ''
        if timeout is None:
            timeout = float(
                self.config.getint('CLIENT_SOCKET_READ_TIMEOUT_MS'))
            timeout = timeout / 1000
        if buffsize is None:
            buffsize = self.config.getint('CLIENT_SOCKET_READ_SIZE')
        try:
            output = self._socket_read(timeout, buffsize)

        except socket.error as msg:
            inmsg('#<====ABORTED RESPONSE WHILE READING: {0}'.format(str(msg)))

        inmsg('# <====FINAL RESPONSE===============')
        inmsg(output)
        responses = Responses().parse(output)
        return responses
Пример #5
0
    def _socket_read(self, timeout, buffsize):

        inmsg('# <==== READING <===========')
        read = b''

        # we use blocking socket, set short timeouts if you want
        # to detect end of response streams
        if 0 == timeout:
            self._sock.settimeout(None)
        else:
            self._sock.settimeout(timeout)

        try:

            # blocking read
            data = self._sock.recv(buffsize)
            while (len(data)):
                inmsg('# ...')
                read += data
                data = self._sock.recv(buffsize)
        except socket.timeout:
            inmsg('# read timeout({0}), nothing more is coming'.format(
                timeout))
        return read
Пример #6
0
    def _socket_read(self, timeout, buffsize):

        inmsg('# <==== READING <===========')
        read = b''

        # we use blocking socket, set short timeouts if you want
        # to detect end of response streams
        if 0 == timeout:
            self._sock.settimeout(None)
        else:
            self._sock.settimeout(timeout)

        try:

            # blocking read
            data = self._sock.recv(buffsize)
            while (len(data)):
                inmsg('# ...')
                read += data
                data = self._sock.recv(buffsize)
        except socket.timeout:
            inmsg(
                '# read timeout({0}), nothing more is coming'.format(timeout))
        return read
Пример #7
0
    def _analyze_invalid_echo_queries(self, stream_mode=False):
        "Having a backend received query which is invalid"
        if self.transmission_zone is not None:
            if stream_mode:
                zone = self.backend_queries
            else:
                if self.transmission_zone is Tools.ZONE_FIRST_LINE:
                    query = self.backend_queries[0]
                    zone = query.first_line.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))
                if self.transmission_zone is Tools.ZONE_HEADERS:
                    query = self.backend_queries[0]
                    zone = b''
                    for header in query.headers:
                        zone += header.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))
                if self.transmission_zone is Tools.ZONE_CHUNK_SIZE:
                    query = self.backend_queries[0]
                    zone = b''
                    if query.chunked:
                        for chunk in query.chunks:
                            zone += chunk.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))

        if self.transmission_map:
            for proof, status in Tools.iteritems(self.transmission_map):
                # here we manipulate bytes strings
                if isinstance(proof, six.string_types):
                    # we do not use special non-ascii chars internally
                    proof = proof.encode('ascii')
                if proof in zone:
                    inmsg('# found one transmission proof,'
                          ' status to : {0}'.format(status))
                    inmsg(repr(proof))
                    self.setStatus(status)
                    return True

        self.setStatus(self.STATUS_TRANSMITTED)
Пример #8
0
 def inmsg(self, message):
     inmsg(message, prefix=b'BACKEND> ', color='blue')
Пример #9
0
 def inmsg(self, message):
     inmsg(message, prefix=b'BACKEND> ', color='blue')
Пример #10
0
 def inmsg(self, message):
     inmsg(message,
           prefix=u'BACKEND {0}> '.format(self.name),
           color='blue')
Пример #11
0
    def _analyze_invalid_echo_queries(self, stream_mode=False):
        "Having a backend received query which is invalid"
        if self.transmission_zone is not None:
            if stream_mode:
                zone = self.backend_queries
            else:
                if self.transmission_zone is Tools.ZONE_FIRST_LINE:
                    query = self.backend_queries[0]
                    zone = query.first_line.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))
                if self.transmission_zone is Tools.ZONE_HEADERS:
                    query = self.backend_queries[0]
                    zone = b''
                    for header in query.headers:
                        zone += header.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))
                if self.transmission_zone is Tools.ZONE_CHUNK_SIZE:
                    query = self.backend_queries[0]
                    zone = b''
                    if query.chunked:
                        for chunk in query.chunks:
                            zone += chunk.raw
                    inmsg('# zone to analyze:.')
                    inmsg(str(zone))

        if self.transmission_map:
            for proof, status in Tools.iteritems(self.transmission_map):
                # here we manipulate bytes strings
                if isinstance(proof, six.string_types):
                    # we do not use special non-ascii chars internally
                    proof = proof.encode('ascii')
                if proof in zone:
                    inmsg('# found one transmission proof,'
                          ' status to : {0}'.format(status))
                    inmsg(repr(proof))
                    self.setStatus(status)
                    return True

        self.setStatus(self.STATUS_TRANSMITTED)