Bash를 사용하여 특정 UDP 포트에서 들어오는 트래픽 속도를 모니터링할 수 있는 방법이 있습니까?
특정 인터페이스의 트래픽을 표시할 수 있는 nload, vnstat와 같은 도구가 있습니다.
이 상황에서 누구든지 나를 도와줄 수 있나요? 특정 포트의 트래픽을 기반으로 일부 bash 작업을 수행하고 싶기 때문입니다.
답변1
tcpdump -i eth0 -w /tmp/xxx.pcap udp port xxx
포트 xxx에 대한 pcap 파일이 제공됩니다.
트래픽만 문제라면 다음을 해킹할 수 있습니다.
while : ; do
sudo timeout 5 tcpdump -i eth0 -s0 port 53 2> /dev/null | wc -l ;
done
답변2
pv
속도 측정을 위해서는 ( pv
Debian/Ubuntu의 패키지)을 권장합니다 . 라인 수와 바이트 수를 계산할 수 있습니다.
예를 들어 기본 tcpdump는 패킷당 한 줄을 제공하므로 2초마다 패킷 속도를 인쇄합니다.
tcpdump -ni eth0 udp port 66 |pv -li2 >/dev/null
바이트 속도의 경우 tcpdump
원시 패킷을 출력하고 pv
해당 바이트를 계산하도록 요청합니다(기본 모드).
tcpdump -ni eth0 udp port 66 -w- |pv -i2 >/dev/null
하지만 비대화형 방식(예: "10초 동안 샘플을 채취하고 측정값 제공")으로 사용할 수 있는지 잘 모르겠습니다. 내가 찾은 가장 가까운 방법은 다음과 같습니다.
rate="$((timeout 11 tcpdump -ni eth0 udp port 66 -w- 2>/dev/null |pv -i10 -F%a -f >/dev/null) 2>&1)"