Como encontrar o tamanho da tabela de roteamento interno com eficiência?

3

Eu preciso saber como encontrar o tamanho da tabela de roteamento do kernel. Eu tenho conhecimento de que a tabela de roteamento está armazenada em /proc/net/route .

Atualmente, estou usando o comando wc para contar o número de caracteres nesse arquivo de roteamento. Mas o problema é que minha tabela de roteamento conterá milhares de entradas e eu preciso encontrar o tamanho dela com muita frequência.

O tamanho do arquivo de roteamento é armazenado em outro lugar? Como posso saber o tamanho do arquivo /proc/net/route com eficiência?

    
por Jerald 05.03.2013 / 02:20

2 respostas

4

Aqui está uma alternativa para usar /proc/net/route para encontrar o número de entradas de rota na sua máquina:

É possível obter essas informações consultando a tabela SNMP MIB da máquina:

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

No exemplo anterior, você estará interessado nas últimas três linhas de saída.

Você também pode executar o seguinte comando para obter apenas a contagem das entradas da tabela de roteamento do seu sistema:

snmpwalk -v 2c -c <YourSNMPString> <YourIPAddress> 1.3.6.1.2.1.4.21 | grep "ipRouteInfo" | wc -l , que retornará um valor de 3 neste caso específico.

Se você estiver mais confortável com uma interface GUI para reunir essas informações, recomendo usar o SNMPb para consultar seus MIBs:

Se alguém estiver interessado em apenas observar o cache de rota, e não simplesmente o número de entradas em sua tabela, pode-se determinar o tamanho do cache de rota com o seguinte comando:

dmesg | grep -i 'IP route cache'

Este comando deve retornar uma saída semelhante à seguinte:

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

Se alguém estiver procurando uma contagem incrementada de tempo das entradas de cache da rota , recomendo usar o seguinte comando:

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

Você pode modificar o intervalo de atualização como quiser e, em seguida, canalizar a saída para um arquivo para facilitar a manipulação (consulte também Ajustando o cache de rotas IPv4 do Linux para mais detalhes). A coluna de entrada rt_cache seria útil se você mantiver uma tabela de roteamento dinâmico em sua máquina e quiser rastrear a flutuação da tabela de rotas (devido a oscilações, retirada de rotas, etc.).

Isso se baseia no tamanho máximo padrão das tabelas IPv4 e IPv6, que você pode obter usando o seguinte comando:

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

O tamanho padrão da tabela de roteamento para IPv4 e IPv6 é 4096 e 524288, respectivamente.

    
por Kevin Bowen 05.03.2013 / 04:18
0

Solução simples:

route -n | wc

Subtraia um do valor retornado para considerar sua rota padrão.

    
por tuit 27.03.2018 / 14:31