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