回答您有关哪些接口承载本地流量的评论实际上很复杂,因为这取决于您所说的本地流量的含义。
“本地”是什么意思
“本地流量”最简单的含义是不会离开机器产生的流量(例如,同一台机器上的两个程序相互通信)。这交通都过去了。这是人们说本地时的意思(以及我回答时的想法)。
下一个最简单的含义是“发往同一子网上的机器的 IP 流量”。那将是在本地子网内具有目标地址的流量。计算这一点的最简单方法是路由表(如果 Mac OS X 计算每个路由的流量统计信息,则各个网关上的路由将为您提供非本地流量)或使用防火墙规则。当他们说“本地交通”时,这可能不是任何人的意思。
另一个含义是“发往此(物理)位置机器的 IP 流量”。例如,在我的办公室,我们有几个子网在使用,它们之间有路由器,但是从一个子网到另一个子网的流量显然仍然是本地的。您需要网络知识来使用此定义区分本地流量和非本地流量。
另一个含义是“发往我组织中机器的 IP 流量”。这是一个合理的含义,具体取决于您的网络设置方式(例如,您的位置之间可能有快速光纤,但您的 Internet 连接速度要慢得多,或者按 GB 收费)。需要对网络有深入的了解才能确定目的地是否是本地的——而且,对于 VPN 之类的东西,这可能会随着时间而变化。
最后,“互联网流量”与任何这些都不相反。有时,例如,您的以太网网段上看似本地的机器实际上是通过 VPN,通过 Internet(这并不疯狂,当远程用户需要使用各种 Windows 服务时,它非常有用)。组织内部的流量可以轻松地通过 Internet VPN 传输。
在简单网络中作弊
如果网络很简单,只有一个内部子网,只有一个路由器,所有不到该内部子网的流量都是互联网流量,你可以作弊解决这个问题。这可能适用于绝大多数家庭网络,也适用于许多小型企业网络。
使用防火墙规则
在简单的网络设置中,您可能会做出一些假设,并通过将流量计为非本地流量来获得足够接近的答案,如果:
- 目的MAC地址是默认网关的MAC地址;和
- 目标 IP 地址不是默认网关的 IP 地址
或者:
- 目标 IP 地址不在网络接口的子网内 默认路由出去
您可能可以创建一个防火墙规则来计算其中任何一个。至少可以使用 Linux iptables,而且我很确定 BSD pf,可能还有 Mac OS X。
替代方法:SNMP
最后,如果您不能使用防火墙规则(因为这需要 root),您可以希望默认网关响应 SNMP 社区公共,探索其所有接口,并找到一个具有子网外 IP 地址的接口,然后假设这是 Internet 链接。然后,您可以向路由器询问该接口上的流量计数。
当然,你会发现很多 SOHO 路由器不支持 SNMP,而那些支持的路由器可能没有打开它。