Usando o SNMP para recuperar as tabelas ARP e mac-address de um switch

33

Gostaria de obter tabelas ARP de um switch para um servidor syslog-ng configurado no Ubuntu Server 12.04 LTS. Eu li sobre o SNMP e sei que o servidor atuará como gerente e o switch como agente. Eu tenho detalhes sobre onde o MIB está contido e devo usar o comando

snmpwalk -v2c -c <community> <SwitchIP> .1.3.6.1.2.1.17.4.3.1.2

Quero que as tabelas arp resultantes sejam direcionadas para o meu servidor.

Meu problema é que não sei exatamente onde executar o comando ou salve a saída em um arquivo.

sosytee
fonte
Olá, adicionar informações a um banco de dados não é tópico ... O superusuário é um bom lugar para perguntar se você precisa de ajuda para modificar um banco de dados. Se você não se importa de excluir essa parte da pergunta, podemos reabri-la.
precisa
Eu modifiquei a minha pergunta
sosytee
O que você quer dizer com "colocar as tabelas ARP no servidor"?
Mike Pennington
As tabelas ARP será gerada pelo switch, mas eu quero que eles visto a partir do servidor
sosytee
E se lhe dissermos como colocá-los em um arquivo de texto ... tudo bem?
Mike Pennington

Respostas:

38

Parece haver um pouco de confusão ... você está perguntando sobre tabelas ARP e está usando o OID .1.3.6.1.2.1.17.4.3.1.2; no entanto, esse OID é realmente para a tabela de endereços mac no comutador.

Estou assumindo que você sabe como fazer login no seu servidor Ubuntu e que NET-SNMPestá instalado ... por favor, deixe-me saber se você precisa de ponteiros para fazer isso (consulte esta pergunta para obter dicas sobre como carregar MIBs no linux ). Alguns dos meus exemplos assumem que você tem os MIBs carregados no servidor ... você só precisa remover a -m <mib-name>opção nos comandos se não tiver os MIBs carregados localmente.

Peço desculpas antecipadamente pela extensão desta resposta ... Desejo que a pesquisa com SNMP não seja tão complicada ...

Sondando a tabela de endereços mac:

Se você realmente deseja que a tabela de endereços MAC seja trocada, lembre-se de que você deve alterar a string da comunidade com a qual você pesquisa ... deve ser na forma de <commity@vlan>... cada vlan que você pesquisa precisa de uma comunidade diferente.

No meu exemplo abaixo, o switch em 172.16.1.210 está configurado com snmp-server community public roe estou pesquisando a tabela de endereços mac na vlan-10 com dot1dTpFdbPort do BRIDGE-MIB .

[mpenning@tsunami ~]$ snmpbulkwalk -v 2c -c public@10 -OXsq 172.16.1.210 \
  .1.3.6.1.2.1.17.4.3.1.2
dot1dTpFdbPort[0:6:53:fe:39:e0] 52
dot1dTpFdbPort[0:1d:a1:cd:53:46] 52
dot1dTpFdbPort[0:30:1b:bc:a7:d7] 52
dot1dTpFdbPort[0:80:c8:0:0:0] 52
dot1dTpFdbPort[38:ea:a7:6d:2e:8e] 52
dot1dTpFdbPort[80:ee:73:2f:b:40] 52
[mpenning@tsunami ~]$

Na saída acima, 52 é o valor de dot1dBasePort, que é um número que o MIB usa para indexar a tabela dot1dTp. Para converter isso em um nome de interface normal, é necessário mapear isso para um ifName ... O BRIDGE-MIB faz isso com dot1dBasePortIfIndex ...

[mpenning@tsunami ~]$ snmpbulkwalk -v 2c -c public@10 -m BRIDGE-MIB 172.16.1.210 \
  .1.3.6.1.2.1.17.1.4.1.2
BRIDGE-MIB::dot1dBasePortIfIndex.52 = INTEGER: 10048
[mpenning@tsunami ~]$
[mpenning@tsunami ~]$ snmpget -v 2c -c public 172.16.1.210 ifName.10048
IF-MIB::ifName.10048 = STRING: Fa0/48
[mpenning@tsunami ~]$

Portanto, sabemos que todos os endereços mac neste switch foram aprendidos através do FastEthernet 0/48 na vlan-10.

Sondando os Vlans ativos:

Se você não tiver certeza de quais vlans pesquisar em um switch, poderá obter essas informações .1.3.6.1.4.1.9.9.46.1.3.1.1.2, que é vtpVlanState no CISCO-VTP-MIB ...

[mpenning@tsunami ~]$ snmpbulkwalk -v 2c -c public -OXsq -m CISCO-VTP-MIB 172.16.1.210 \
   .1.3.6.1.4.1.9.9.46.1.3.1.1.2
vtpVlanState[1][1] operational
vtpVlanState[1][10] operational
vtpVlanState[1][1002] operational
vtpVlanState[1][1003] operational
vtpVlanState[1][1004] operational
vtpVlanState[1][1005] operational
[mpenning@tsunami ~]$

Lembre-se de que os Vlans 1002-1005 são Cisco Vlans internos que você não deve pesquisar.

Sondando a tabela ARP

Se você realmente deseja a tabela ARP a partir do switch, é necessário pesquisar atPhysAddress ...

[mpenning@tsunami ~]$ snmpbulkwalk -v 2c -c public -OXsq  172.16.1.210 \
  .1.3.6.1.2.1.3.1.1.2
atPhysAddress[10][1.172.16.1.5] "80 EE 73 2F 0B 40 "
atPhysAddress[10][1.172.16.1.25] "38 EA A7 6D 2E 8E "
atPhysAddress[10][1.172.16.1.32] "BC 51 FE 50 16 F8 "
atPhysAddress[10][1.172.16.1.200] "00 06 53 FE 39 E0 "
atPhysAddress[10][1.172.16.1.210] "00 18 BA 51 5B 41 "
[mpenning@tsunami ~]$

Salvando a Saída do Comando em um Arquivo

Estamos investigando áreas que estão fora do escopo normal deste site, mas para salvar a tabela ARP acima em um arquivo /tmp/S01_ARP.txt, você adicionaria > /tmp/S01_ARP.txtao final das informações snmpbulkwalkacima ...

[mpenning@tsunami ~]$ snmpbulkwalk -v 2c -c public -OXsq  172.16.1.210 \
      .1.3.6.1.2.1.3.1.1.2 > /tmp/S01_ARP.txt
[mpenning@tsunami ~]$ cat /tmp/S01_ARP.txt
atPhysAddress[10][1.172.16.1.5] "80 EE 73 2F 0B 40 "
atPhysAddress[10][1.172.16.1.25] "38 EA A7 6D 2E 8E "
atPhysAddress[10][1.172.16.1.32] "BC 51 FE 50 16 F8 "
atPhysAddress[10][1.172.16.1.200] "00 06 53 FE 39 E0 "
atPhysAddress[10][1.172.16.1.210] "00 18 BA 51 5B 41 "
[mpenning@tsunami ~]$

Como você vê acima, você pode usar catno linux para obter toda a saída de um arquivo de texto. NOTA: Algumas distribuições linux (ahem ... CentOS) limpam o /tmpdiretório mensalmente. Você deve usar seu HOMEdiretório no linux para armazenar o arquivo. Não me lembro da limpeza do Ubuntu /tmp, mas, por segurança, evitava guardar coisas lá.

Notas diversas sobre SNMP ...

Se você não carregou todos os MIBs da Cisco em sua máquina Ubuntu, evite usar os -m <mib-name>sinalizadores nos snmpbulkwalkcomandos. Carregar MIBs permite pesquisar com um nome OID, em vez do número longo pontilhado ...


Informação de referência:

Estou incluindo alguns comandos show do switch, caso você tenha dúvidas sobre a CLI dos comandos SNMP acima ...

S01#sh ver | i IOS
Cisco IOS Software, C3560 Software (C3560-IPBASEK9-M), Version 12.2(37)SE, RELEASE SOFTWARE (fc2)
S01#
S01#sh mac address-table dynamic
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
  10    0006.53fe.39e0    DYNAMIC     Fa0/48
  10    001d.a1cd.5346    DYNAMIC     Fa0/48
  10    0030.1bbc.a7d7    DYNAMIC     Fa0/48
  10    0080.c800.0000    DYNAMIC     Fa0/48
  10    38ea.a76d.2e8e    DYNAMIC     Fa0/48
  10    80ee.732f.0b40    DYNAMIC     Fa0/48
Total Mac Addresses for this criterion: 6
S01#
S01#sh arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.1.210            -   0018.ba51.5b41  ARPA   Vlan10
Internet  172.16.1.200            0   0006.53fe.39e0  ARPA   Vlan10
Internet  172.16.1.32             0   bc51.fe50.16f8  ARPA   Vlan10
Internet  172.16.1.25             0   38ea.a76d.2e8e  ARPA   Vlan10
Internet  172.16.1.5              1   80ee.732f.0b40  ARPA   Vlan10
S01#
Mike Pennington
fonte
a resposta foi útil, eu gostaria de saber o significado de -OXsq pouco antes de o endereço ip
sosytee
1
verifique man snmpcmdse você está em um host Linux e tem o Net-SNMP instalado. Caso contrário, você pode encontrar essas informações aqui: net-snmp.sourceforge.net/docs/man/snmpcmd.html
John Jensen
@ MikePennington: Você pode comentar sobre os OIDs ipNetToMediaPhysAddress e ifPhysAddress? Especificamente, a diferença semântica entre essas tabelas e atPhysAddress?
Mormegil
Além do acima, você pode instalar o netDB nesse servidor Ubuntu e obter mais visibilidade nas tabelas ARP de vários dispositivos. netdbtracking.sourceforge.net
Kunal