다음 명령을 사용하여 voip 트래픽을 tcpdump합니다.
tcpdump -nn port 5060 -i eth0 | grep 'xxx.xxx.xxx.xxx.5060: SIP: SIP/2.0 5'
그리고 다음과 같은 것을 얻습니다:
11:10:03.600493 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:03.610092 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:03.860551 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:04.190145 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 504 Server Time-out
11:10:04.510174 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:04.870164 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:06.010196 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:07.039787 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 503 Service Unavailable
11:10:07.330243 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:08.520721 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 500 Server Internal Error
11:10:08.720207 IP xxx.xxx.xxx.xxx.5060 > yyy.yyy.yyy.yyy.5060: SIP: SIP/2.0 503 Service Unavailable
현재 초의 해당 행 수를 실시간으로 어떻게 얻을 수 있습니까? 즉, 11:10:08이면 2를 얻습니다.
답변1
원본 게시물에서 언급한 라이브 솔루션입니다.
다음 코드를 스크립트로 저장하고 실행 가능하게 만듭니다.
#!/bin/bash
current_sec=0
while read line
do
prev_sec=$current_sec
current_sec=${line:0:8}
if [ "$current_sec" == "$prev_sec" ]
then
line_count=$((line_count+1))
else
echo $prev_sec /// $line_count
line_count=1
fi
done
그런 다음 다음을 실행하십시오.
tcpdump -nn port 5060 -i eth0 | grep 'xxx.xxx.xxx.xxx.5060: SIP: SIP/2.0 5' | saved_script.sh
실시간으로 인쇄됩니다.
13:29:50 /// 0
13:29:51 /// 4
13:29:52 /// 9
13:29:54 /// 2
이 코드를 충분히 테스트하지 않았으며 버그가 있을 수 있지만 직접 테스트할 수 있습니다.
답변2
나는 마지막 로그의 날짜를 얻은 다음 그것을 찾아보고 시계를 추가합니다. 그것이 당신에게 필요한 것이라고 믿습니다.
somefile - 로그 파일입니다
grep $(tail -1 somefile | awk -F . '{print $1}') somefile
watch -n1 "grep $(tail -1 somefile | awk -F . '{print $1}') somefile"
답변3
파일이 정렬되어 있다고 가정합니다.
grep -oP "^[0-2][0-9]:[0-2][0-9]:[0-2][0-9]" inputfile | uniq -c
매초마다 항목 수를 반환합니다.
3 11:10:03
3 11:10:04
1 11:10:06
2 11:10:07
2 11:10:08