如何连续监控通过管道的发生次数

如何连续监控通过管道的发生次数

我有一个脚本可以捕获数据包并输出链接到新发现的 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

您意识到对于通过网络接口的每个数据包,您至少发出两个whois请求(因此发送更多数据包并在某处加载一个或多个 whois 服务器)?

在这里,我假设tsharkIP 地址地理定位数据库已安装并正确配置:

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

相关内容