如何监控热点上每个设备的数据使用情况?

如何监控热点上每个设备的数据使用情况?

我的家庭设备过度使用互联网数据,导致出现一些问题。问题是我无法弄清楚哪个设备耗尽了我的所有数据。

我确实有一个始终处于开启状态的树莓派。我的计划是通过以太网将 pi 连接到接入点,然后在 pi 上设置一个热点,以便我的所有家用电器都连接到 pi 的热点。

然后,由于所有互联网流量都将流经 pi 的热点,我觉得必须有某种方法来使用 pi 监控每个设备的数据使用情况。

在我的研究中,我发现了 Wireshark,但这对于这个用例来说似乎是杀伤力过大且效率低下。 (更不用说相当复杂了)。

有些网站建议使用 ntop,但我不知道它是否有效。

Tcpdump:看起来也非常复杂和矫枉过正。

关于我可以使用什么有什么建议吗? (我的路由器没有使用驾驶功能,我不想购买路由器)。我可以忍受 pi 较差的网络硬件造成的小瓶颈

答案1

首先,您需要一种方法来识别您的设备,以便您知道哪个是哪个。出于隐私原因,一些较新的移动设备会随机化其 MAC 地址,除非您专门将它们配置为足够信任特定网络以使用其出厂默认 MAC 地址。

拥有静态 MAC 地址通常足以使 IP 地址或多或少保持稳定,但您可以将 RasPi 热点的 DHCP 服务器配置为始终通过 MAC 地址向每个客户端提供特定的静态 IP 地址。

一旦您有使用已知 IP 地址的客户端,您就可以添加自己的iptables规则链,每个设备有两个规则来充当数据包/字节计数器,如下所示:

iptables -N packetcount   # create a custom rule chain
iptables -A packetcount -s <device IP> -o <wired interface> -j RETURN -m comment --comment "FROM <device name>"
iptables -A packetcount -i <wired interface> -d <device IP> -j RETURN -m comment --comment "TO <device name>"
[...add a pair of rules for each device...]

然后,添加此自定义链作为第一的FORWARD 标准规则链中的规则:

iptables -I FORWARD 1 -j packetcount

现在,您将拥有一组用于每个设备的传入和传出数据的数据包/字节计数器,您可以使用以下命令读取:

iptables -L packetcount -vn

(使用-n此处的选项使得命令不会花时间尝试将 IP 解析为主机名,而且更早-m comment --comment ...的操作会导致每个计数器出现一个易于理解的名称。)

该列表的长度将超过 80 个字符,因此请使用宽终端窗口来查看它。列表中的前两列是规则匹配的数据包数量和总字节数。

如果您想将计数器归零(例如,在读取计数器后每天一次),您可以通过以下方式执行此操作:

iptables -Z packetcount

为了获得最大的准确性,您可以将列出和归零结合起来,以便每个计数器在归零之前立即列出:

iptables -Z packetcount -L -vn

相关内容