strings comando imprime alguns caracteres extras

2

Eu estou tentando capturar o tráfego mysql usando o tcpdump e convertê-lo em texto usando o comando strings , mas ao capturar o tráfego do mysql, estou recebendo algum caractere extra no final de cada caractere. Eu não consigo descobrir o motivo.

por exemplo,

CREATE TABLE foo1.foo (id INTEGER, name VARCHAR(20))H>

Como você pode ver, há H> no final da consulta. Alguém pode me ajudar a resolver isso?

Editar: estou executando o seguinte comando para capturar o tráfego.

$ sudo tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings -12
    
por pradeepchhetri 29.07.2013 / 13:43

1 resposta

3

O protocolo mysql não é um protocolo de texto, portanto, seqüências de caracteres e números expressos como binários serão trocados. Se os bytes que compõem os números parecem corresponder aos caracteres imprimíveis em sua localidade, eles serão exibidos por strings .

Mesmo se fosse um protocolo texto , a consulta seria seguida pelo início do próximo quadro Ethernet capturado, com um cabeçalho pcap que pode muito bem conter valores de byte que correspondem a caracteres imprimíveis em seu localidade. Normalmente, os primeiros 4 bytes do cabeçalho pcap são o tempo da captura expresso como um número de 32 bits no endianness local. Por exemplo, a hora atual do Unix é 0x51f65c79, que em um PC x86 seria armazenada como os bytes: 0x79 (ASCII y ), 0x5c (barra invertida ASCII), 0xfc, 0x51 (ASCII q ), que é provavelmente o que sua visão desde em um pacote query do MySQL, o próprio texto da consulta é o que vem por último.

Lembre-se também de que consultas longas podem ser fragmentadas em vários pacotes TCP e podem conter caracteres que não podem ser impressos em sua localidade.

Você deve usar algo que seja capaz de dissecar o protocolo mysql como tshark :

tshark -T fields -e 'mysql.query' -i any -R 'mysql.command == 3' tcp port mysql

Isso diz a tshark para capturar o tráfego TCP na porta 3306 (mysql) na interface any , filtrando apenas o tráfego de consulta do mysql ( mysql.command == 3 ) e exibindo apenas query .

    
por 29.07.2013 / 14:00

Tags