2

bash スクリプトから tcpdump コマンドを実行しています。このように見えます。

tcpdump -nttttAr /path/to/file -F /my/filter/file

フィルタ ファイルには、IP アドレスとホスト名の組み合わせが含まれています。つまり、ホスト 111.111.111.111 またはホスト 112.112.112.112 であり、ホスト abc.com またはホスト def.com またはホスト zyx.com ではありません。

そして、ホスト名がすべて有効である限り、うまく機能します。私の問題は、これらのホスト名が有効でない場合があり、ホスト名に遭遇すると-tcpdumpが吐き出すことです

tcpdump: Unknown Host

-n オプションを使用すると、DNSルックアップがスキップされると思いましたが、いずれにせよ、不明なホストを無視してフィルターファイルに沿って続行する必要があります。

何か案は?

前もって感謝します。

4

1 に答える 1

2

この-nオプションは、IP アドレスから名前への変換を防ぎますが、その逆は防ぎます。引数としてホスト名を指定した場合、パケットには数値アドレスのみが含まれ、ホスト名は含まれないため、IP アドレスを取得するために検索する必要があります。ただし、無効なホスト名を無視する方法があるはずですが、見つかりません。を使用してフィルタ ファイルを前処理することもできますdig

dig +short non-existent-domain.com    # returns null
dig +short google.com                 # returns multiple IP addresses

これはおそらく改善される可能性がありますが、有効でないフィルター ファイル内のホスト名が表示されるはずです。

grep -Po '(?<=host )[^ )]*' filterfile | grep -v '[0-9]$' | xargs -I % sh -c 'echo -n "% "; echo $(dig +short %)' | grep -v ' [0-9]'

印刷されたホスト名には、によって返された IP アドレスがありませんでしたdig

于 2010-10-05T20:28:08.880 に答える