tcpdump quebra de expressão de filtro via adb

0

Eu instalei o tcpdump no meu tablet Android e estou executando comandos de um shell adb de raiz. Eu estou trabalhando a partir de os exemplos de páginas man do tcpdump , especificamente este:

To print all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets.

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 e executar 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 é executado corretamente no dispositivo Android:

tcpdump 'tcp port 80'

Parece que a expressão de filtro não está sendo analisada corretamente, ou algo assim, mas, sinceramente, não sei exatamente como isso funciona, por isso não sei por onde começar a solução de problemas. Alguma idéia sobre o que está errado ou como consertá-lo?

    
por Michelle 25.01.2015 / 02:24

2 respostas

3

As aspas fazem com que o comando adb seja passado em 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)

sem as aspas (como o shell na 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)'"

que significa que o comando adb 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, 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)'
    
por 25.01.2015 / 11:22
1

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

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

Eu abro o shell primeiro e, em seguida, executo o tcpdump:

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