파이프 통과 발생 횟수를 지속적으로 모니터링하는 방법

파이프 통과 발생 횟수를 지속적으로 모니터링하는 방법

패킷을 캡처하고 새로 발견된 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 서버를 로드함)을 수행한다는 사실을 알고 계십니까?

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.

관련 정보