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 adb
receba três argumentos:
shell
tcpdump
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 adb
comando será passado
shell
tcpdump
'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)'