TCPDump-Filterausdruck bricht über ADB ab

TCPDump-Filterausdruck bricht über ADB ab

Ich habe tcpdump auf meinem Android-Tablet installiert und führe Befehle von einer Root-ADB-Shell aus. Ich arbeite vondie tcpdump-Manpage-Beispiele, und zwar dieses hier:

Zum Drucken aller IPv4-HTTP-Pakete von und zu Port 80, d. h. zum Drucken nur von Paketen, die Daten enthalten, nicht beispielsweise SYN- und FIN-Pakete und Nur-ACK-Pakete.

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

Wenn ich den obigen Befehl auf meinem Desktop (Ubuntu) ausführe, läuft er einwandfrei. Wenn ich versuche, ihn auf meinem Android-Gerät auszuführen, geht das so:

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

Ich erhalte diesen Fehler:

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

Und der folgende Befehl läuft problemlos auf dem Android-Gerät:

tcpdump 'tcp port 80'

Es scheint, als würde der Filterausdruck nicht richtig analysiert oder so, aber ich bin ehrlich gesagt nicht sicher, wie das genau funktioniert, also weiß ich nicht, wo ich mit der Fehlerbehebung anfangen soll. Irgendwelche Ideen, was schief läuft oder wie man es beheben kann?

Antwort1

Die Anführungszeichen bewirken, dass dem Befehl adbdrei Argumente übergeben werden:

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

Es wird dann vermutlich versucht, den Befehl auszuführen

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

ohnedie Anführungszeichen (da die Shell auf dem Computer, auf dem Sie den Befehl eingegeben haben, die Anführungszeichen entfernt hat) auf dem Android-Computer.

Das können Sie wahrscheinlich tun

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

Das bedeutet, dass der adbBefehl weitergegeben wird

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

so dass es versucht, den Befehl auszuführen

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

auf dem Android-Gerät.

Dasselbe Problem würde beispielsweise mit sshdem Befehl bestehen;

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

erhält die Fehler

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)'

Antwort2

Ich bin mir immer noch nicht sicher, wo genau der Befehl nicht richtig interpretiert wurde, aber es besteht kein Problem mehr, wenn Sie stattdessen Folgendes eingeben:

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

Ich öffne zuerst die Shell und führe dann tcpdump aus:

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

verwandte Informationen