Instalé tcpdump en mi tableta Android y estoy ejecutando comandos desde un shell adb raíz. estoy trabajando desdelos ejemplos de la página de manual de tcpdump, específicamente este:
Para imprimir todos los paquetes HTTP IPv4 hacia y desde el puerto 80, es decir, imprimir solo paquetes que contengan datos, no, por ejemplo, paquetes SYN y FIN ni paquetes de solo ACK.
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Si ejecuto el comando anterior en mi escritorio (Ubuntu), funciona bien. Si intento ejecutarlo en mi dispositivo Android, así:
adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Recibo este error:
/system/bin/sh: can't create 2)) != 0): Read-only file system
/system/bin/sh: here document missing
tcpdump: syntax error
Y el siguiente comando funciona bien en el dispositivo Android:
tcpdump 'tcp port 80'
Parece que la expresión del filtro no se está analizando correctamente o algo así, pero seré honesto, no estoy seguro de cómo funciona exactamente, así que no estoy seguro de por dónde empezar con la solución de problemas. ¿Alguna idea sobre qué está pasando o cómo solucionarlo?
Respuesta1
Las comillas hacen que al comando adb
se le pasen tres argumentos:
shell
tcpdump
tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
Presumiblemente luego intenta ejecutar el comando.
tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
sinlas comillas (ya que el shell de la máquina en la que escribió el comando eliminó las comillas) en la máquina Android.
Probablemente puedas hacer
adb shell tcpdump "'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'"
lo que significa que el adb
comando será pasado
shell
tcpdump
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
para que intente ejecutar el comando
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
en la máquina Android.
El mismo problema existiría con, por ejemplo, ssh
; El comando
ssh localhost tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
obtiene los errores
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)'
Respuesta2
Todavía no estoy seguro de dónde exactamente no se estaba interpretando correctamente el comando, pero ya no hay problema si en lugar de esto:
adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Primero abro el shell y luego ejecuto tcpdump:
adb shell
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'