Androidタブレットにtcpdumpをインストールし、ルートadbシェルでコマンドを実行しました。私の勤務時間は次のとおりです。tcpdump のマニュアルページの例、特にこれは:
ポート80前後のすべてのIPv4 HTTPパケットを印刷します。つまり、データを含むパケットのみが印刷されます。たとえば、SYNおよびFINパケットとACKパケットだけは印刷されません。
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
デスクトップ(Ubuntu)で上記のコマンドを実行すると、正常に実行されます。 Androidデバイスで次のように実行しようとすると:
adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
次のエラーが発生します。
/system/bin/sh: can't create 2)) != 0): Read-only file system
/system/bin/sh: here document missing
tcpdump: syntax error
次のコマンドは、Androidデバイスで正しく機能します。
tcpdump 'tcp port 80'
フィルタ式が正しく解析されていないようです。しかし、正直なところ、それが正確にどのように機能するのかわからないので、トラブルシューティングをどこから始めるべきかわかりません。何が間違っているのか、解決策のアイデアはありますか?
答え1
引用符はコマンドにadb
3つのパラメータを渡します。
shell
tcpdump
tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
その後、コマンドを実行しようとすることができます。
tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)
いいえAndroidコンピュータで引用符を使用します(コマンドを入力したコンピュータのシェルが引用符を削除したため)。
することができます
adb shell tcpdump "'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'"
これはadb
コマンドが渡されることを意味します。
shell
tcpdump
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
これにより、コマンドを実行しようとします。
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Androidコンピュータで。
たとえば、同じ問題がありますssh
。
ssh localhost tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
エラーが発生しました
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)'
答え2
このコマンドが正しく解釈されない部分がどこにあるかはまだわかりませんが、そうでない場合は問題は発生しません。
adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
まず、シェルを開き、tcpdumpを実行します。
adb shell
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'