在网络环境中,例如SOHO,有没有什么工具可以根据计算机的IP或MAC地址来监控网络带宽使用情况?这样我们就可以知道哪个用户的带宽使用率最高。如果可能的话,还可以根据 IP 或 MAC 地址统计每台计算机的使用情况。
答案1
有多种工具可以提供帮助,也许最值得注意的是iftop
,它可能在您的发行版的官方存储库中提供。它使用curses 接口报告每个IP 的带宽信息libpcap
。
它接受tcpdump
-style 参数来修改其过滤器,例如,iftop -f "port http"
过滤器仅包含在端口 80 结束的流量。
答案2
iftop 用于即时查看的类似顶部的界面。
ntop 通过 Web 界面提供大量统计数据
argus 同上,带有 CLI 界面。
另请参阅 Linux 上的 iptstate 以获取连接跟踪器跟踪的信息。
答案3
iptables 防火墙可以用来实现这一点。
它具有每个过滤器规则的字节和数据包计数。因此,我们的想法是为网络上的每个 IP 制定过滤规则。由于 iptables 计数不是持久的(并且在 4GB 时溢出),因此创建一个 cron 作业来定期读取和重置计数器。
脚步:
添加入站和出站流量的统计表
iptables -N acct_in
iptables -N acct_out
设置默认规则(返回给父母)
iptables -A acct_in -j RETURN
iptables -A acct_out -j RETURN
对于每个客户端 IP:添加输入和输出规则:
iptables -I acct_in -d 192.168.x.y
iptables -I acct_out -s 192.168.x.y
最后将 acct_* 链附加到 FORWARD 链
iptables -A FORWARD -j acct_in
iptables -A FORWARD -j acct_out
这应该是您的基本 iptables 设置。
您可以使用读取计数器值
iptables -v -L acct_in # for inbound traffic
iptables -v -L acct_out # for outbound traffic
...并使用重置计数器
iptables -Z acct_in
iptables -Z acct_out
我建议编写一个作为 cronjob 运行的脚本来读取和重置计数器值并将它们存储到文件中。使用该-x
标志来获取可能更容易处理的精确值。
或者我可以推荐你看看我的一个旧项目:nf_配额。我用了很长时间,当时我们有 3GB/月的流量限制。它运行非常稳定,但代码已经很多年没有更新了......
它在内核中充当 netfilter 插件。缺点是你必须自己编译它。
优点是 IP 会自动添加,您甚至可以设置每个 IP 或总限制,并且有一个简洁的命令行工具来读取统计信息。
/编辑:我刚刚自己检查了代码,发现它无法使用最新的内核进行编译,因为幕后发生了一些变化。所以我建议不要使用这个项目,除非你知道你在做什么(但是欢迎补丁;))
答案4
听起来您需要对网关设备进行一些监控。如果您的防火墙/路由器能够提供 snmp 数据,我建议使用 Spiceworks 或 Solar Wind 来收集您需要的数据