如何有效地找到内部路由表的大小?

如何有效地找到内部路由表的大小?

我需要知道如何找到内核路由表的大小。我知道路由表存储在 中/proc/net/route

我目前正在使用命令wc来计算此路由文件中的字符数。但问题是我的路由表将包含数千个条目,我需要能够非常频繁地找到它的大小。

路由文件的大小是否存储在其他地方?如何高效地获取文件大小/proc/net/route

答案1

/proc/net/route以下是查找机器上路由条目数量的替代方法:

可以通过轮询机器的 SNMP MIB 表来获取此信息:

snmpwalk -v 2c -c <YourSNMPString> <YourIPAddress> 1.3.6.1.2.1.4.21

RFC1213-MIB::ipRouteDest.0.0.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteDest.169.254.0.0 = IpAddress: 169.254.0.0
RFC1213-MIB::ipRouteDest.192.168.1.0 = IpAddress: 192.168.1.0
RFC1213-MIB::ipRouteIfIndex.0.0.0.0 = INTEGER: 2
RFC1213-MIB::ipRouteIfIndex.169.254.0.0 = INTEGER: 2
RFC1213-MIB::ipRouteIfIndex.192.168.1.0 = INTEGER: 2
RFC1213-MIB::ipRouteMetric1.0.0.0.0 = INTEGER: 1
RFC1213-MIB::ipRouteMetric1.169.254.0.0 = INTEGER: 0
RFC1213-MIB::ipRouteMetric1.192.168.1.0 = INTEGER: 0
RFC1213-MIB::ipRouteNextHop.0.0.0.0 = IpAddress: 192.168.1.1
RFC1213-MIB::ipRouteNextHop.169.254.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteNextHop.192.168.1.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteType.0.0.0.0 = INTEGER: indirect(4)
RFC1213-MIB::ipRouteType.169.254.0.0 = INTEGER: direct(3)
RFC1213-MIB::ipRouteType.192.168.1.0 = INTEGER: direct(3)
RFC1213-MIB::ipRouteProto.0.0.0.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteProto.169.254.0.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteProto.192.168.1.0 = INTEGER: local(2)
RFC1213-MIB::ipRouteMask.0.0.0.0 = IpAddress: 0.0.0.0
RFC1213-MIB::ipRouteMask.169.254.0.0 = IpAddress: 255.255.0.0
RFC1213-MIB::ipRouteMask.192.168.1.0 = IpAddress: 255.255.255.0
RFC1213-MIB::ipRouteInfo.0.0.0.0 = OID: SNMPv2-SMI::zeroDotZero
RFC1213-MIB::ipRouteInfo.169.254.0.0 = OID: SNMPv2-SMI::zeroDotZero
RFC1213-MIB::ipRouteInfo.192.168.1.0 = OID: SNMPv2-SMI::zeroDotZero

在前面的例子中,您会对最后三行输出感兴趣。

或者,您可以运行以下命令来仅获取系统路由表条目的数量:

snmpwalk -v 2c -c <YourSNMPString> <YourIPAddress> 1.3.6.1.2.1.4.21 | grep "ipRouteInfo" | wc -l3在这种特殊情况下它将返回一个值。

如果你更喜欢使用 GUI 界面来收集这些信息,我建议你使用SNMP协议查询你的 MIB:

如果只对查看路由缓存感兴趣,而不是简单地了解表中的条目数,则可以使用以下命令确定路由缓存的大小:

dmesg | grep -i 'IP route cache'

此命令应返回类似以下内容的输出:

[0.213066] IP route cache hash table entries: 32768 (order: 5, 131072 bytes)

如果要查找路由缓存的时间递增计数条目,我建议使用以下命令:

lnstat -s1 -i1 -c-1 -f rt_cache

您可以根据需要修改更新间隔,然后将输出传输到文件以便于操作(另请参阅调整 Linux IPv4 路由缓存了解更多详细信息)。rt_cache如果您在机器上维护动态路由表并希望跟踪路由表波动(由于抖动、路由撤销等),则条目列将很有用。

这是基于 IPv4 和 IPv6 表的默认最大大小,您可以使用以下命令获取:

cat /proc/sys/net/ipv{4,6}/route/max_size

IPv4 和 IPv6 的默认路由表大小分别为 4096 和 524288。

答案2

简单的解决方案:

route -n | wc

从返回值中减一作为默认路由。

相关内容