tcpdumpフィルタ式がadbを介して中断されました

tcpdumpフィルタ式がadbを介して中断されました

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

引用符はコマンドにadb3つのパラメータを渡します。

  1. shell
  2. tcpdump
  3. 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コマンドが渡されることを意味します。

  1. shell
  2. tcpdump
  3. '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)'

おすすめ記事