expressão de filtro tcpdump quebra via adb

expressão de filtro tcpdump quebra via adb

Instalei o tcpdump no meu tablet Android e estou executando comandos de um shell adb root. Estou trabalhando deexemplos de páginas de manual do tcpdump, especificamente este:

Imprimir todos os pacotes HTTP IPv4 de e para a porta 80, ou seja, imprimir apenas pacotes que contenham dados, não, por exemplo, pacotes SYN e FIN e pacotes somente ACK.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Se eu executar o comando acima na minha área de trabalho (Ubuntu), ele funcionará bem. Se eu tentar executá-lo no meu dispositivo Android, assim:

adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Eu recebo este erro:

/system/bin/sh: can't create 2)) != 0): Read-only file system
/system/bin/sh: here document missing
tcpdump: syntax error

E o seguinte comando funciona bem no dispositivo Android:

tcpdump 'tcp port 80'

Parece que a expressão do filtro não está sendo analisada corretamente ou algo assim, mas, para ser sincero, não tenho certeza de como funciona exatamente, por isso não sei por onde começar a solução de problemas. Alguma idéia sobre o que está errado ou como consertar?

Responder1

As aspas fazem com que o comando adbreceba três argumentos:

  1. shell
  2. tcpdump
  3. tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

Presumivelmente, ele tenta executar o comando

tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

semas aspas (já que o shell da máquina em que você digitou o comando removeu as aspas) na máquina Android.

Você provavelmente pode fazer

adb shell tcpdump "'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'"

o que significa que o adbcomando será passado

  1. shell
  2. tcpdump
  3. 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

para que ele tente executar o comando

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

na máquina Android.

O mesmo problema existiria com, por exemplo ssh,; o comando

ssh localhost tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

recebe os erros

bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Responder2

Ainda não tenho certeza de onde exatamente o comando não estava sendo interpretado corretamente, mas não há mais problema se, em vez disso:

adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Abro o shell primeiro e depois executo o tcpdump:

adb shell
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

informação relacionada