パイプ通過の発生回数を継続的に監視する方法

パイプ通過の発生回数を継続的に監視する方法

パケットをキャプチャし、新しく検出された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

関連情報