![特定 UDP 端口上的流量监控](https://linux22.com/image/210641/%E7%89%B9%E5%AE%9A%20UDP%20%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7.png)
有什么方法可以使用 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)"