패킷을 캡처하고 새로 발견된 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
.