Python + NAPALM | Imprimir en pantalla el estado de una interfaz de un Router Cisco

Normalmente cuando ejecutamos un script básico usando la libreria NAPALM y con la función
"get_interfaces" obtendriamos un output del equivalente al comando "show ip int brief"
de una forma más prográmatica como podemos observar a continuación:

eve@Linux-Desktop:~$ python3 test1.py
{'FastEthernet0/0': {'description': 'Fa0/0-Test',
                     'is_enabled': True,
                     'is_up': True,
                     'last_flapped': -1.0,
                     'mac_address': 'C2:02:0F:F7:00:00',
                     'mtu': 1500,
                     'speed': 10},
 'FastEthernet0/1': {'description': 'Fa0/1-Test',
                     'is_enabled': False,
                     'is_up': False,
                     'last_flapped': -1.0,
                     'mac_address': 'C2:02:0F:F7:00:01',
                     'mtu': 1500,
                     'speed': 10},
 'Loopback0': {'description': 'Loopback-test',
               'is_enabled': False,
               'is_up': False,
               'last_flapped': -1.0,
               'mac_address': '',
               'mtu': 1514,
               'speed': 8000}}

Vemos claramente que existen 3 interfaces en este router Cisco pero..¿Cómo podriamos hacer para solo imprimir en pantalla el estado de la interfaz "Loopback0" por ejemplo?

Primero de todo observamos que el output de arriba es del tipo "diccionario" en Python ya que en cada interfaz existen valores del tipo clave valor (key-value pair). 

Dicho esto,con el fin de imprimir en pantalla el estado de una interfaz en específico (Como referencia usaremos Loopback0) tendremos que ir jugando con las variables en Python como os muestro a continutación:

SCRIPT

import napalm
import json 
# Introducimos el nombre de la interfaz sin abreviaciones (Ej.: FastEthernet0/0)
y lo guardamos en la variable "x" 
 print("Enter the interface name (Example: FastEthernet0/0(): ")
 x = input() 
# Definimos el driver IOS en NAPALM + la IP del host + Usuario/Password SSH
 driver = napalm.get_network_driver('ios')
device = driver(hostname='192.168.1.100', username='cisco', password='cisco')
# Nos conectamos al host definido arriba via SSH
device.open() 
# Guardamos la función "get_interfaces" de NAPALM en la variable "getint"
getint = device.get_interfaces() 
# Guardamos el output de "get_interfaces" de la interfaz definida 
en la variable "getint_value" 
getint_value = getint[x] 
# Realizamos una acción similar pero ahora guardamos el valor clave "is_up" donde
nos indica en estado de la interfaz. El resultado de este valor es del tipo Booleano 
(True o False)
getint_isup = getint_value["is_up"] 
# Creamos un condicional donde indicamos si el valor "is_up" de la interfaz tiene en valor UP (o "True)
imprimos en pantalla que la interfaz está UP. Por lo contrario, si la interfaz tiene
el valor DOWN (o False) imprimiremos en pantalla que la interfaz está DOWN. 
if getint_isup == True:
    print ("--------------------------")
    print ("Interface " + x + " is UP")
else:
    print ("--------------------------")
    print ("Interface " + x + " is DOWN")
device.close()

RESULTADO (OUTPUT)

eve@Linux-Desktop:~$ python3 test1_4.py
Enter the interface name (Example: FastEthernet0/0):
Loopback0
--------------------------
Interface Loopback0 is DOWN
eve@Linux-Desktop:~$ nano test1_4.py
eve@Linux-Desktop:~$ python3 test1_4.py
Enter the interface name (Example: FastEthernet0/0):
FastEthernet0/0
--------------------------
Interface FastEthernet0/0 is UP

Comentarios

Entradas populares de este blog

EVE-NG: Instalación de EVE-NG

Fortigate: Capturar paquetes (Packet capture/sniffer)

Cisco ISE | Certificados SSL públicos para Guest Portal