Мне нужно знать, как найти размер таблицы маршрутизации ядра. Я знаю, что таблица маршрутизации хранится в /proc/net/route
.
В настоящее время я использую команду wc
для подсчета количества символов в этом файле маршрутизации. Но проблема в том, что моя таблица маршрутизации будет содержать тысячи записей, и мне нужно очень часто находить ее размер.
Сохраняется ли размер файла маршрутизации в другом месте? Как мне эффективно узнать размер файла /proc/net/route
?
Вот альтернатива использованию /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 -l
который возвратит значение 3
в данном случае.
Если бы Вы более довольны графическим интерфейсом для сбора этой информации, я рекомендовал бы использовать SNMPb для запросов МИБ:
Если Вы интересуетесь только рассмотрением кэша маршрутов и не просто количества записей в Вашей таблице, можно определить размер кэша маршрутов со следующей командой:
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, соответственно.
Простое решение:
route -n | wc
Вычтите одно из возвращенного значения, чтобы учесть ваш маршрут по умолчанию.