パケットをキャプチャし、新しく検出されたIPに接続された2桁の国コードを出力するスクリプトがあります。
国別のパケット数を監視し、パケットキャプチャ中にこれを継続的に実行したいと思います。
出力はuniq -c
正確に私に必要なものですが、時間の経過とともに変化し、パイプの出力を読み取るときに更新されることを望みます。
これは私のスクリプトです。
#!/bin/bash
ngrep |grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | while read i
do
whois $i | grep -i 'Country' | sed 's/Country:[ ]*//I'
done
答え1
ネットワークインターフェイスを通過するすべてのパケットに対して少なくとも2回のwhois
要求(したがってより多くのパケットを送信し、どこかに1つ以上のwhoisサーバーをロードする)を実行することをご存知ですか?
tshark
ここでは、IPアドレス位置情報データベースが正しくインストールおよび構成されていると想定しています。
tshark -lq -T fields -e ip.geoip.src_country -e ip.geoip.dst_country |
gawk -F '\t' -v clear="$(tput clear)" '
BEGIN{PROCINFO["sorted_in"] = "@ind_str_asc"}
{
count[$1 ? $1 : "Unknown"]++
count[$2 ? $2 : "Unknown"]++
printf "%s", clear
for (c in count)
printf "%5d %s\n", count[c], c
}'
答え2
あなたが使用できるwatch
:
./your_script > countries.txt
watch "sort countries.txt | uniq -c"
作業速度を上げるには、次のようにします。
./your_script | awk '{seen[$0]++;
for(c in seen) printf("%s:%d ", c,seen[c]); printf("\n")}' >countries.txt
watch "tail -n 1 countries.txt | tr ' ' '\n'"
whois
しかし、代わりに試してみることができますgeoiplookup
。