ホスト マシンに関連するパケットを除いて、ネットワーク上でダンプされるすべてのパケットの送信元 MAC アドレスを取得しようとしています。これを達成するには、無差別モードでホストのネットワーク インターフェイスを使用して tcpdump からデータを取得する必要があると思います。
完全なヘッダーやリンク レベルのヘッダーを取得することに関心がないことに注意してください。-e
オプションは私が望むものではありません。各パケットの送信元 MAC アドレスが必要なだけで、それ以上は必要ありません。
これは私が現在行っていることです:
sudo tcpdump -I -elt -i wlan0 not host 127.0.0.1 2>> /dev/null | sed 's/ .*//'
ローカル ネットワーク インターフェイスの実際の IP アドレスに127.0.0.1
置き換えられます。
これは、送信元 MAC アドレスが tcpdump によって出力される最初の情報である一部のネットワークでうまく機能します。残念ながら、これは常に私の経験ではありませんでした。tcpdump への出力はプロトコルに依存しているようで、一部のネットワークでは異なります。
MAC アドレスの正規表現に一致する最初の項目を出力するように、sed コマンドを書き直すことができると思います。
(?:[0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}
しかし、行の最初の MAC アドレスが常に送信元 MAC アドレスになるかどうかはわかりません。
tcpdump に送信元 MAC アドレスを直接出力させる方法がない場合、リンク レベル ヘッダーから raw ビットを出力させる方法はありますか? そこから、送信元 MAC アドレスをつなぎ合わせることができるはずです。