有没有办法使用免费的网络健康/分析工具(如 Cacti 或 Wireshark)生成每个 MAC 地址或 IP 地址的广播数量列表,按一段时间内的广播数量排序?
我想找到异常“健谈”并发出太多广播的网络设备,从而降低所有其他设备的吞吐量。
有没有办法使用免费的网络健康/分析工具(如 Cacti 或 Wireshark)生成每个 MAC 地址或 IP 地址的广播数量列表,按一段时间内的广播数量排序?
我想找到异常“健谈”并发出太多广播的网络设备,从而降低所有其他设备的吞吐量。
对于临时报告,我通常会使用最少的 Unix 工具来执行此操作:tcpdump
和awk
.
首先收集带有以太地址的广播者:
$ sudo tcpdump -en broadcast > /tmp/NOISY
这会生成一个每个数据包一行的文件。如果您想要 ip 广播或其他一些限制,请使用不同的 tcpdump 过滤器。该文件将有很多这些:
21:39:49.028308 90:fb:a6:31:91:3e > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 60: 192.168.0.32.3483 > 255.255.255.255.3483: UDP, length 16
21:40:01.862984 34:02:86:7f:e7:dc > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 187: 192.168.0.27.17500 > 255.255.255.255.17500: UDP, length 145
...
然后你awk
用来获取第二个字段(以太地址),对它们进行排序,计算唯一值,并按数字计数排序:
$ awk '{ print $2; }' /tmp/NOISY | sort | uniq -c | sort -n
1 90:fb:a6:31:91:3e
2 34:02:86:7f:e7:dc
5 ec:e1:a9:cd:58:22
如果您使用的是wireshark,您可以只打印以太网源地址,因此您可以执行以下操作:
$ sudo tshark -n -e eth.src -Tfields broadcast > /tmp/NOISY
$ cat /tmp/NOISY | sort | uniq -c | sort -n
使用 SNMP,您可以使用广播 OID 获取每个交换机接口的广播计数器,但是要获得异常行为检测,您将需要更高级的东西,例如异常检测系统
可以这样想:子网中的所有机器都可以看到广播。因此,在所有子网上放置一台机器并开始计数。
挥手:
为每个 VLAN 配置一个交换机端口作为中继。将其连接到...
一台Linux机器。为网络中的每个 VLAN 配置一个带有 VLAN 接口的接口。配置 iptables 和 ip6tables 以丢弃该接口的所有流量。
现在,仅界面计数器就具有教育意义。您可以安装 Net-SNMP 并直接绘制它们。您可以使用wireshark 跟进高广播VLAN,以获得一些短期的胜利。
对于长期问题,在 Linux 机器上安装 IPFIX 导出软件,将其运行到同一台机器上的 IPFIX 收集器,并使用收集器的“top talker”功能生成定期报告。
IPFIX 将是非常低效的过度杀伤力,因此从长远来看,您将在 Python 中编写自己的多 VLAN 侦听器,该侦听器保留 (vlan, mac) 表和广播/全站多播数量的衰减平均值。您将获取这些值中的最大值并通过 Net-SNMP 将其报告回来,以便为网络管理平台(Nagios 等)提供警报值。