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 adb
drei Argumente übergeben werden:
shell
tcpdump
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 adb
Befehl weitergegeben wird
shell
tcpdump
'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 ssh
dem 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)'