Générer la liste des sous-réseaux sur le commutateur à l'aide de SNMP?

9

Quelqu'un connaît-il une approche pour générer une liste de sous-réseaux sur un commutateur particulier (choisissons-en un plus populaire - Cisco) en utilisant SNMP? Que diriez-vous d'une liste de VLAN? Si oui, pouvez-vous me signaler les MIB / OID concernés? (réseau débutant ici)

Dmitri Boulanov
la source

Réponses:

8

Interfaces / adressage IP:

Si vous cherchez à interroger l'adresse IP d'un appareil, le masque de sous-réseau et l'interface correspondante, vous pouvez utiliser les OID suivants à partir des MIB IP-MIB et IF- MIB:

  • .1.3.6.1.2.1.4.20.1.1 - L'adresse IP se trouve à cet OID

    ~]$ snmptranslate .1.3.6.1.2.1.4.20.1.1
    IP-MIB::ipAdEntAddr
    
    ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.1
    IP-MIB::ipAdEntAddr.10.30.46.1 = IpAddress: 10.30.46.1
    IP-MIB::ipAdEntAddr.25.255.25.254 = IpAddress: 25.255.25.254
    IP-MIB::ipAdEntAddr.55.44.33.22 = IpAddress: 55.44.33.22
    IP-MIB::ipAdEntAddr.172.31.10.10 = IpAddress: 172.31.10.10
    


  • .1.3.6.1.2.1.4.20.1.3 - La canne du masque de sous-réseau se trouve à cet OID

    ~]$ snmptranslate .1.3.6.1.2.1.4.20.1.3
    IP-MIB::ipAdEntNetMask
    
    ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.3
    IP-MIB::ipAdEntNetMask.10.30.46.1 = IpAddress: 255.255.255.0
    IP-MIB::ipAdEntNetMask.25.255.25.254 = IpAddress: 255.255.255.0
    IP-MIB::ipAdEntNetMask.55.44.33.22 = IpAddress: 255.255.255.0
    IP-MIB::ipAdEntNetMask.172.31.10.10 = IpAddress: 255.255.255.0
    


  • .1.3.6.1.2.1.4.20.1.2- L'index d'interface (index ifTable ) sont des entiers uniques pour chaque interface.

    ~]$ snmptranslate .1.3.6.1.2.1.4.20.1.2
    IP-MIB::ipAdEntIfIndex
    
    ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.4.20.1.2
    IP-MIB::ipAdEntIfIndex.10.30.46.1 = INTEGER: 1
    IP-MIB::ipAdEntIfIndex.25.255.25.254 = INTEGER: 5
    IP-MIB::ipAdEntIfIndex.55.44.33.22 = INTEGER: 6
    IP-MIB::ipAdEntIfIndex.172.31.10.10 = INTEGER: 7
    


  • .1.3.6.1.2.1.2.2.1.2- Le nom convivial de l'interface peut être trouvé à cet OID et l'index ifTable est ajouté (par exemple. ...2.1.2.[INDEX]) Pour chaque interface.

    ~]$ snmptranslate .1.3.6.1.2.1.2.2.1.2
    IF-MIB::ifDescr
    
    ~]$ snmpwalk -v2c -c cisco 10.30.46.1 .1.3.6.1.2.1.2.2.1.2
    IF-MIB::ifDescr.1 = STRING: FastEthernet0/0
    IF-MIB::ifDescr.2 = STRING: FastEthernet0/1
    IF-MIB::ifDescr.4 = STRING: Null0
    IF-MIB::ifDescr.5 = STRING: Loopback0
    IF-MIB::ifDescr.6 = STRING: Tunnel10
    IF-MIB::ifDescr.7 = STRING: Dialer1
    IF-MIB::ifDescr.8 = STRING: Virtual-Access1
    

Vous pouvez parcourir ces OID manuellement, écrire quelque chose dans la langue de votre choix ou utiliser des programmes / scripts beaucoup plus intelligents similaires à ce qui est mentionné dans la réponse de Tim Peck.

Voici un exemple de shell rapide (et sale):

#!/bin/bash
# duct taped by one.time
# Basic interface information collector

##
# Set usage var and getoptions
usage="Usage: interface-info.sh -H <IP Address> -C <snmp community string>

OPTIONS:
  -H Hostname          set IP address or hostname
  -h Help              prints usage options

SNMPv2 OPTIONS:
  -C Community         set SNMPv2 community string
"

while getopts H:C:h option;
do
        case $option in
                H) ipaddress=$OPTARG;;
                C) community=$OPTARG;;
                h) echo "$usage"
                exit $invalid_result;;
        esac
done

##
# Prevent blank argvars
if [[ -z $ipaddress || -z $community ]]; then
  echo "$usage"
  exit 0
fi

## 
# Set field separator to new line
IFS=$'\n'

##
# Store our IP-MIB info in arrays
ipAdEntAddr=( $(snmpbulkwalk -v2c -c $community  $ipaddress .1.3.6.1.2.1.4.20.1.1 | awk -F ": " '{print $2}') )
ipAdEntNetMask=( $(snmpbulkwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.4.20.1.3 | awk -F ": " '{print $2}') )
ipAdEntIfIndex=( $(snmpbulkwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.4.20.1.2 | awk -F ": " '{print $2}') )

for ((i=0; i<${#ipAdEntAddr[@]}; i++)); do
  ifDescr[$i]=$(snmpwalk -v2c -c $community $ipaddress .1.3.6.1.2.1.2.2.1.2.${ipAdEntIfIndex[$i]} | awk -F ": " '{print $2}')
  echo "${ifDescr[$i]}: ${ipAdEntAddr[$i]} ${ipAdEntNetMask[$i]}"
done

Exemple:

~]$ ./interface-info.sh -H 10.30.46.1 -C cisco
FastEthernet0/0: 10.30.46.1 255.255.255.0
Loopback0: 25.255.25.254 255.255.255.0
Tunnel10: 55.44.33.22 255.255.255.0
Dialer1: 172.31.10.10 255.255.255.0


VLAN:

Si vous recherchez les ID VLAN et les noms VLAN, vous pouvez utiliser l'OID suivant:

  • .1.3.6.1.4.1.9.9.46.1.3.1.1.4.1Le vtpVlanName peut être trouvé (sur les périphériques Cisco) à cet OID et le VLAN-ID peut être trouvé en annexe, par exemple: ...1.4.1.[VLAN-ID](similaire à l'exemple ifIndex et ifDescr ci-dessus).

    ~]$ snmptranslate  .1.3.6.1.4.1.9.9.46.1.3.1.1.4.1
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1
    
    ~]$ snmpwalk -v2c -c cisco 192.168.0.8 SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1 = STRING: "default"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.10 = STRING: "VLAN0010"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.21 = STRING: "VLAN0021"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.100 = STRING: "VLAN0100"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.344 = STRING: "VLAN0344"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.456 = STRING: "iSCSI-TRAFFIC"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1002 = STRING: "fddi-default"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1003 = STRING: "token-ring-default"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1004 = STRING: "fddinet-default"
    SNMPv2-SMI::enterprises.9.9.46.1.3.1.1.4.1.1005 = STRING: "trnet-default"
    


Exemple manuel de suppression des ID de VLAN:

    ~]$ snmpbulkwalk -v2c -c cisco 192.168.0.8 1.3.6.1.4.1.9.9.46.1.3.1.1.4 | sed -e 's/.*4.1.\(.*\) =.*/\1/'
    1
    10
    21
    100
    344
    456
    1002
    1003
    1004
    1005
une fois
la source
1

Si vous souhaitez obtenir des informations sur les adresses IP d'interface à partir de commutateurs / routeurs dans un format similaire à un fichier hôte, vous pouvez utiliser mon script bash. Je voulais avoir des informations réelles sur toutes les adresses IP des périphériques réseau de notre réseau. Tous les appareils sont accessibles via SNMP. Je n'ai pas pu trouver d'outil ou de script capable de le faire, j'ai donc décidé de l'écrire moi-même. La sortie peut être simple à ajouter au fichier hôte. La description de l'interface ou un préfixe est écrit en tant que commentaire, il sera par exemple affiché dans la sortie de traceroute pendant que vous pouvez rechercher le fichier hôte pour la description de l'interface.

La sortie est dans ce format:

ABCD Device_hostname-Interface_name # / Prefix #Interface description

10.1.1.1 router_R01-Gi1 / 0/2 # 28

10.5.1.22 Beijing-router01-WAN-Tu611 # 24 # Port vers Internet

192.168.24.254 firewall2-eth5 # 24

Le script est disponible sur http://network-linux.webnode.cz/news/bash-script-for-gathering-ip-addresses-of-interfaces-through-snmp .

sultan
la source
0

Switchmap fera tout cela pour vous.

http://sourceforge.net/projects/switchmap/

Tim Peck
la source
5
Merci pour votre réponse; cependant, il a demandé des MIB, pas une demande. Il pourrait peut-être l'utiliser, mais essayez de répondre à la question posée.
Mike Pennington