![如何监控热点上每个设备的数据使用情况?](https://linux22.com/image/228840/%E5%A6%82%E4%BD%95%E7%9B%91%E6%8E%A7%E7%83%AD%E7%82%B9%E4%B8%8A%E6%AF%8F%E4%B8%AA%E8%AE%BE%E5%A4%87%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%9F.png)
我的家庭设备过度使用互联网数据,导致出现一些问题。问题是我无法弄清楚哪个设备耗尽了我的所有数据。
我确实有一个始终处于开启状态的树莓派。我的计划是通过以太网将 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