(self, raw)
Parse PostgreSQL packet.  psql is less insane.
Parse PostgreSQL packet.  psql is less insane.
Parse PostgreSQL packet . psql is less insane .
def parse_postgres(self, raw):
        """Parse PostgreSQL packet.  psql is less insane."""
        raw = util.get_layer_bytes(str(raw))
        if len(raw) <= 1:
            return

        message_type = raw[0]
        if message_type == '70':
            # password message
            plen = parser_postgres.endian_int(raw[1:5])
            password = ''
            for i in xrange(plen - 5):
                password += raw[5 + i].decode('hex')
            self.log_msg('Password hash: %s' % password)
        elif message_type == '51':
            # simple query
            query = parser_postgres.parse_query(raw)
            self.log_msg('Query: %s' % query)
        elif message_type == '54':
            if self.dump_data:
                # query response
                (columns, rows) = parser_postgres.parse_response(raw)
                if not columns is None and not data is None:
                    pattern = re.compile('[\W_]+')
                    Query = namedtuple("Query",
                                    [pattern.sub('', x.name) for x in columns])
                    table = []
                    for row in rows:
                        row = Query._make(row)
                        table.append(row)
                    pptable(table)
        elif message_type == '58':
            self.log_msg('User quit.\n')
        elif message_type == '45':
            self.log_msg('Error: %s' % parser_postgres.parse_error(raw))
        elif message_type == '52':
            if not parser_postgres.database_exists(raw):
                self.log_msg('Invalid database.')
        elif message_type == '00':
            # startup/other
            if parser_postgres.is_ssl(raw):
                self.log_msg('SSL request!')
            else:
                startup = parser_postgres.parse_startup(raw)
                self.log_msg('Startup packet:')
                idx = 0
                while idx < len(startup) - 1:
                    self.log_msg('\t%s -> %s' %
                                        (startup[idx], startup[idx + 1]))
                    idx += 2
def parse_postgres ( self , raw ) : raw = util . get_layer_bytes ( str ( raw ) ) if len ( raw ) <= 1 : return message_type = raw [ 0 ] if message_type == '70' : # password message plen = parser_postgres . endian_int ( raw [ 1 : 5 ] ) password = '' for i in xrange ( plen - 5 ) : password += raw [ 5 + i ] . decode ( 'hex' ) self . log_msg ( 'Password hash: %s' % password ) elif message_type == '51' : # simple query query = parser_postgres . parse_query ( raw ) self . log_msg ( 'Query: %s' % query ) elif message_type == '54' : if self . dump_data : # query response ( columns , rows ) = parser_postgres . parse_response ( raw ) if not columns is None and not data is None : pattern = re . compile ( '[\W_]+' ) Query = namedtuple ( "Query" , [ pattern . sub ( '' , x . name ) for x in columns ] ) table = [ ] for row in rows : row = Query . _make ( row ) table . append ( row ) pptable ( table ) elif message_type == '58' : self . log_msg ( 'User quit.\n' ) elif message_type == '45' : self . log_msg ( 'Error: %s' % parser_postgres . parse_error ( raw ) ) elif message_type == '52' : if not parser_postgres . database_exists ( raw ) : self . log_msg ( 'Invalid database.' ) elif message_type == '00' : # startup/other if parser_postgres . is_ssl ( raw ) : self . log_msg ( 'SSL request!' ) else : startup = parser_postgres . parse_startup ( raw ) self . log_msg ( 'Startup packet:' ) idx = 0 while idx < len ( startup ) - 1 : self . log_msg ( '\t%s -> %s' % ( startup [ idx ] , startup [ idx + 1 ] ) ) idx += 2