NAPALM Network Automation Python: Trabajando con Huawei VRP
Introducción
En este artículo vamos conocer las funciones y métodos de NAPALM para colectar datos en routers Huawei VRP. Escribiremos múltiples scripts en Python para colectar datos de una red, que podrás usar para crear reportes o investigar sobre algún problema. Este es una continuación del artículo en el que trabajamos con Cisco IOS y IOS-XR y es parte de la aventura en la que quiero enseñarles como puedes implementar Programabilidad y Automatización de Redes con Python y la librería NAPALM.
El contenido principal está en el siguiente video. Así que empieza por aquí para que puedas entender algunas secciones del artículo.
NAPALM Plugin: Huawei-CE
Como recordarán en la página oficial este Sistema Operativo VRP no sale listado como uno de los SO soportados por NAPALM. Este caso en particular es un desarrollo realizado por la comunidad.
Los desarrollos de la comunidad son conocidos como Plugins de NAPALM porque no vienen en la librería oficial y no son mantenidos por los Core Developers. Pero sin son hosteados en una página común creada por ellos, llamada NAPALM Automation Community.
Para ver esa lista de Plugins primero entramos a la página de “napalm.readthedocs.io”, sección Contribuiting, Proposing a new driver,luego Community Driver y finalmente aquí encontraremos un link que nos llevará a la página donde está la colección de plugins desarrollados por la comunidad y validados por los Core Developers de NAPALM.
El plugin que vamos a utilizar para trabajar con los equipos Huawei se llama napalm-ce. A continuación los métodos soportados por este plugin:
cli(commands)
close()
commit_config()
compare_config()
discard_config()
get_arp_table()
get_config(retrieve=u'all')
get_environment()
get_facts()
get_interfaces()
get_interfaces_counters()
get_interfaces_ip()
get_lldp_neighbors()
get_mac_address_table()
get_users()
is_alive()
load_merge_candidate(filename=None, config=None)
load_replace_candidate(filename=None, config=None)
open()
ping(destination, source=u'', ttl=255, timeout=2, size=100, count=5, vrf=u'')
rollback()
Instalación del Plugin NAPALM-CE
Para instalar napalm-ce solo hay que ejecutar el siguiente comando:
pip install napalm-ce
NAPALM CLI
Como ya sabemos la instalación de NAPALM viene con una herramienta que nos permite utilizar NAPALM directamente desde la línea de comandos. Su uso es bastante simple y podemos ver como se utiliza en el menú de ayuda del comando.
Desde esta herramienta es posible ejecutar operaciones de configuración a los dispositivos, validar configuraciones o estados y realizar llamadas a los métodos de NAPALM para obtener datos de los dispositivos.
En esta ocasión vamos a utilizar esta herramienta para probar el Plugin Huawei-CE en uno de los switches de la red que vimos en el video.
Veamos un ejemplo:
napalm --user codingnetworks --password Coding.Networks1 --vendor ce VRP-SW2 call get_interfaces
Extracto de la Salida:
"Vlanif1": {
"description": " ",
"is_enabled": true,
"is_up": true,
"last_flapped": -1.0,
"mac_address": "70:7B:E8:66:35:99",
"duplex": "",
"speed": -1,
"mtu": "1500",
"port_bw": "",
"rx_optic": "",
"tx_optic": "",
"crc_errors": ""
},
"Vlanif10": {
"description": " ",
"is_enabled": true,
"is_up": true,
"last_flapped": -1.0,
"mac_address": "70:7B:E8:66:35:99",
"duplex": "",
"speed": -1,
"mtu": "1500",
"port_bw": "",
"rx_optic": "",
"tx_optic": "",
"crc_errors": ""
}
NAPALM Python
Es en esta sección es donde empezaremos a ver y disfrutar de las bondades de utilizar NAPALM para programabilidad y automatización de redes en los dispositivos Huawei.
NAPALM Python Tabla de Informaciones e Interfaces
Vamos a modificar el script que hicimos en el video Trabajando con Cisco IOS y IOS-XR para que nos imprima en una tabla informaciones como el hostname, fabricante, modelo, tiempo que tienen en operación y el número de serial de los dispositivos Huawei. A continuación el código modificado:
import napalm from tabulate import tabulate def main(): driver_vrp = napalm.get_network_driver("ce") device_list = [["vrp-sw2","vrp", "switch"],["vrp-r2", "vrp", "router"], ["vrp-r3", "vrp", "router"],["vrp-r1", "vrp", "router"],["vrp-sw1", "vrp", "switch"]] network_devices = [] for device in device_list: network_devices.append( driver_vrp( hostname = device[0], username = "codingnetworks", password = "Coding.Networks1" ) ) devices_table = [["hostname", "vendor", "model", "uptime", "serial_number"]] devices_table_int = [["hostname","interface","is_up", "is_enabled", "description", "speed", "mtu", "mac_address"]] for device in network_devices: print("Connecting to {} ...".format(device.hostname)) device.open() print("Getting device facts") device_facts = device.get_facts() devices_table.append([device_facts["hostname"], device_facts["vendor"], device_facts["model"], device_facts["uptime"], device_facts["serial_number"] ]) print("Getting device interfaces") device_interfaces = device.get_interfaces() for interface in device_interfaces: devices_table_int.append([device_facts["hostname"], interface, device_interfaces[interface]['is_up'], device_interfaces[interface]['is_enabled'], device_interfaces[interface]['description'], device_interfaces[interface]['speed'], device_interfaces[interface]['mtu'], device_interfaces[interface]['mac_address'] ]) device.close() print("Done.") print(tabulate(devices_table, headers="firstrow")) print() print(tabulate(devices_table_int, headers="firstrow")) if __name__ == '__main__': main()
En el video se encuentra la explicación de este código.
Veamos la salida del Script:
Connecting to vrp-sw2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r3 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r1 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-sw1 ...
Getting device facts
Getting device interfaces
Done.
hostname vendor model uptime serial_number
---------- -------- ------- -------- ---------------
VRP-SW2 Huawei CE6800 240 []
VRP-R2 Huawei NE40E 240 []
VRP-R3 Huawei NE40E 240 []
VRP-R1 Huawei NE40E 240 []
VRP-SW1 Huawei CE6800 300 []
hostname interface is_up is_enabled description speed mtu mac_address
---------- -------------------- ------- ------------ ----------------------------- ------- ----- -----------------
VRP-SW2 GE1/0/0 True True To Cloud Management -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/1 True True to_VRP-R1 Eth 1/0/1 - LAN -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/2 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/3 True True to_PC1 - LAN -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/4 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/5 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/6 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/7 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/8 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/9 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/10 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/11 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/12 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/13 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/14 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/15 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/16 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/17 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/18 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/19 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/20 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/21 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/22 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/23 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/24 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/25 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/26 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/27 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/28 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/29 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/30 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/31 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/32 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/33 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/34 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/35 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/36 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/37 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/38 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/39 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/40 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/41 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/42 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/43 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/44 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/45 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/46 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/47 False False -1 70:7B:E8:66:35:99
VRP-SW2 MEth0/0/0 False True -1 1500 70:7B:E8:66:35:98
VRP-SW2 NULL0 True True -1 1500
VRP-SW2 Vlanif1 True True -1 1500 70:7B:E8:66:35:99
VRP-SW2 Vlanif10 True True -1 1500 70:7B:E8:66:35:99
VRP-R2 Ethernet1/0/0 False True to_VRP-SW2 GE 1/0/1 - LAN -1 1500 38:1F:01:01:01:00
VRP-R2 Ethernet1/0/0.30 True True to_VRP-SW1 GE 1/0/0 - VLAN 30 -1 1500 38:1F:01:01:01:00
VRP-R2 Ethernet1/0/1 False True -1 1500 38:1F:01:01:01:01
VRP-R2 Ethernet1/0/2 True True to_VRP-R1 Eth 1/0/2 - LAN -1 1500 38:1F:01:01:01:02
VRP-R2 Ethernet1/0/3 False True -1 1500 38:1F:01:01:01:03
VRP-R2 Ethernet1/0/4 False True -1 1500 38:1F:01:01:01:04
VRP-R2 Ethernet1/0/5 False True -1 1500 38:1F:01:01:01:05
VRP-R2 Ethernet1/0/6 False True -1 1500 38:1F:01:01:01:06
VRP-R2 Ethernet1/0/7 False True -1 1500 38:1F:01:01:01:07
VRP-R2 Ethernet1/0/8 False True -1 1500 38:1F:01:01:01:08
VRP-R2 Ethernet1/0/9 False True -1 1500 38:1F:01:01:01:09
VRP-R2 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:01:11:10
VRP-R2 LoopBack0 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500
VRP-R2 NULL0 True True -1 1500
VRP-R3 Ethernet1/0/0 True True to_VRP-R1 GE 1/0/0 - LAN -1 1500 38:1F:01:03:01:00
VRP-R3 Ethernet1/0/1 False True -1 1500 38:1F:01:03:01:01
VRP-R3 Ethernet1/0/2 False True -1 1500 38:1F:01:03:01:02
VRP-R3 Ethernet1/0/3 False True -1 1500 38:1F:01:03:01:03
VRP-R3 Ethernet1/0/4 False True -1 1500 38:1F:01:03:01:04
VRP-R3 Ethernet1/0/5 False True -1 1500 38:1F:01:03:01:05
VRP-R3 Ethernet1/0/6 False True -1 1500 38:1F:01:03:01:06
VRP-R3 Ethernet1/0/7 False True -1 1500 38:1F:01:03:01:07
VRP-R3 Ethernet1/0/8 False True -1 1500 38:1F:01:03:01:08
VRP-R3 Ethernet1/0/9 False True -1 1500 38:1F:01:03:01:09
VRP-R3 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:03:11:10
VRP-R3 LoopBack0 True True Management IP -1 1500
VRP-R3 LoopBack1 True True Management IP -1 1500
VRP-R3 NULL0 True True -1 1500
VRP-R1 Ethernet1/0/0 True True to_VRP-R2 Eth 1/0/0 - LAN -1 1500 38:1F:01:02:01:00
VRP-R1 Ethernet1/0/1 False True to_VRP-SW2 GE 1/0/1 - LAN -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/1.1 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/1.10 True True to_VRP-SW2 GE 1/0/1 - VLAN 10 -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/2 True True to_VRP-R3 Eth 1/0/2 - LAN -1 1500 38:1F:01:02:01:02
VRP-R1 Ethernet1/0/3 False True -1 1500 38:1F:01:02:01:03
VRP-R1 Ethernet1/0/4 False True -1 1500 38:1F:01:02:01:04
VRP-R1 Ethernet1/0/5 False True -1 1500 38:1F:01:02:01:05
VRP-R1 Ethernet1/0/6 False True -1 1500 38:1F:01:02:01:06
VRP-R1 Ethernet1/0/7 False True -1 1500 38:1F:01:02:01:07
VRP-R1 Ethernet1/0/8 False True -1 1500 38:1F:01:02:01:08
VRP-R1 Ethernet1/0/9 False True -1 1500 38:1F:01:02:01:09
VRP-R1 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:02:11:10
VRP-R1 LoopBack0 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500
VRP-R1 NULL0 True True -1 1500
VRP-SW1 GE1/0/0 True True to_VRP-R2 Eth 1/0/0 - LAN -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/1 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/2 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/3 True True to_PC1 - LAN -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/4 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/5 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/6 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/7 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/8 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/9 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/10 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/11 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/12 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/13 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/14 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/15 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/16 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/17 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/18 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/19 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/20 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/21 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/22 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/23 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/24 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/25 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/26 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/27 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/28 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/29 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/30 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/31 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/32 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/33 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/34 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/35 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/36 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/37 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/38 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/39 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/40 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/41 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/42 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/43 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/44 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/45 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/46 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/47 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 MEth0/0/0 False True -1 1500 70:7B:E8:B0:04:A4
VRP-SW1 NULL0 True True -1 1500
VRP-SW1 Vlanif30 True True -1 1500 70:7B:E8:B0:04:A5
NAPALM Python Tabla de Mac Addresess
Vamos a modificar el código anterior para agregar otra funcionalidad. Esta funcionalidad permitirá que el script nos imprima una tabla con la tabla mac addresses de los switches. A continuación el código:
import napalm from tabulate import tabulate def main(): driver_vrp = napalm.get_network_driver("ce") device_list = [["vrp-sw2","vrp", "switch"],["vrp-r2", "vrp", "router"], ["vrp-r3", "vrp", "router"],["vrp-r1", "vrp", "router"],["vrp-sw1", "vrp", "switch"]] network_devices = [] for device in device_list: network_devices.append( driver_vrp( hostname = device[0], username = "codingnetworks", password = "Coding.Networks1" ) ) devices_table = [["hostname", "vendor", "model", "uptime", "serial_number"]] devices_table_int = [["hostname","interface","is_up", "is_enabled", "description", "speed", "mtu", "mac_address"]] devices_mac_table = [["hostname","mac", "ïnterface", "vlan", "static"]] for device in network_devices: print("Connecting to {} ...".format(device.hostname)) device.open() print("Getting device facts") device_facts = device.get_facts() devices_table.append([device_facts["hostname"], device_facts["vendor"], device_facts["model"], device_facts["uptime"], device_facts["serial_number"] ]) print("Getting device interfaces") device_interfaces = device.get_interfaces() for interface in device_interfaces: devices_table_int.append([device_facts["hostname"], interface, device_interfaces[interface]['is_up'], device_interfaces[interface]['is_enabled'], device_interfaces[interface]['description'], device_interfaces[interface]['speed'], device_interfaces[interface]['mtu'], device_interfaces[interface]['mac_address'] ]) if "SW" in device_facts["hostname"]: print("Getting Mac Address Table from Switch") device_mac_info = device.get_mac_address_table() for mac_entry in device_mac_info: devices_mac_table.append([device_facts["hostname"], mac_entry["mac"], mac_entry["interface"], mac_entry["vlan"], mac_entry["static"], ]) device.close() print("Done.") print(tabulate(devices_table, headers="firstrow")) print() print(tabulate(devices_table_int, headers="firstrow")) print() print(tabulate(devices_mac_table, headers="firstrow")) if __name__ == '__main__': main()
En el video se encuentra la explicación de este código.
Veamos la salida de este código:
Connecting to vrp-sw2 ...
Getting device facts
Getting device interfaces
Getting Mac Address Table from Switch
Done.
Connecting to vrp-r2 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r3 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-r1 ...
Getting device facts
Getting device interfaces
Done.
Connecting to vrp-sw1 ...
Getting device facts
Getting device interfaces
Getting Mac Address Table from Switch
Done.
hostname vendor model uptime serial_number
---------- -------- ------- -------- ---------------
VRP-SW2 Huawei CE6800 240 []
VRP-R2 Huawei NE40E 240 []
VRP-R3 Huawei NE40E 240 []
VRP-R1 Huawei NE40E 240 []
VRP-SW1 Huawei CE6800 300 []
hostname interface is_up is_enabled description speed mtu mac_address
---------- -------------------- ------- ------------ ----------------------------- ------- ----- -----------------
VRP-SW2 GE1/0/0 True True To Cloud Management -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/1 True True to_VRP-R1 Eth 1/0/1 - LAN -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/2 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/3 True True to_PC1 - LAN -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/4 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/5 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/6 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/7 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/8 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/9 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/10 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/11 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/12 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/13 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/14 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/15 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/16 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/17 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/18 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/19 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/20 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/21 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/22 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/23 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/24 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/25 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/26 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/27 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/28 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/29 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/30 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/31 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/32 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/33 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/34 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/35 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/36 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/37 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/38 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/39 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/40 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/41 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/42 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/43 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/44 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/45 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/46 False False -1 70:7B:E8:66:35:99
VRP-SW2 GE1/0/47 False False -1 70:7B:E8:66:35:99
VRP-SW2 MEth0/0/0 False True -1 1500 70:7B:E8:66:35:98
VRP-SW2 NULL0 True True -1 1500
VRP-SW2 Vlanif1 True True -1 1500 70:7B:E8:66:35:99
VRP-SW2 Vlanif10 True True -1 1500 70:7B:E8:66:35:99
VRP-R2 Ethernet1/0/0 False True to_VRP-SW2 GE 1/0/1 - LAN -1 1500 38:1F:01:01:01:00
VRP-R2 Ethernet1/0/0.30 True True to_VRP-SW1 GE 1/0/0 - VLAN 30 -1 1500 38:1F:01:01:01:00
VRP-R2 Ethernet1/0/1 False True -1 1500 38:1F:01:01:01:01
VRP-R2 Ethernet1/0/2 True True to_VRP-R1 Eth 1/0/2 - LAN -1 1500 38:1F:01:01:01:02
VRP-R2 Ethernet1/0/3 False True -1 1500 38:1F:01:01:01:03
VRP-R2 Ethernet1/0/4 False True -1 1500 38:1F:01:01:01:04
VRP-R2 Ethernet1/0/5 False True -1 1500 38:1F:01:01:01:05
VRP-R2 Ethernet1/0/6 False True -1 1500 38:1F:01:01:01:06
VRP-R2 Ethernet1/0/7 False True -1 1500 38:1F:01:01:01:07
VRP-R2 Ethernet1/0/8 False True -1 1500 38:1F:01:01:01:08
VRP-R2 Ethernet1/0/9 False True -1 1500 38:1F:01:01:01:09
VRP-R2 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:01:11:10
VRP-R2 LoopBack0 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500
VRP-R2 NULL0 True True -1 1500
VRP-R3 Ethernet1/0/0 True True to_VRP-R1 GE 1/0/0 - LAN -1 1500 38:1F:01:03:01:00
VRP-R3 Ethernet1/0/1 False True -1 1500 38:1F:01:03:01:01
VRP-R3 Ethernet1/0/2 False True -1 1500 38:1F:01:03:01:02
VRP-R3 Ethernet1/0/3 False True -1 1500 38:1F:01:03:01:03
VRP-R3 Ethernet1/0/4 False True -1 1500 38:1F:01:03:01:04
VRP-R3 Ethernet1/0/5 False True -1 1500 38:1F:01:03:01:05
VRP-R3 Ethernet1/0/6 False True -1 1500 38:1F:01:03:01:06
VRP-R3 Ethernet1/0/7 False True -1 1500 38:1F:01:03:01:07
VRP-R3 Ethernet1/0/8 False True -1 1500 38:1F:01:03:01:08
VRP-R3 Ethernet1/0/9 False True -1 1500 38:1F:01:03:01:09
VRP-R3 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:03:11:10
VRP-R3 LoopBack0 True True Management IP -1 1500
VRP-R3 LoopBack1 True True Management IP -1 1500
VRP-R3 NULL0 True True -1 1500
VRP-R1 Ethernet1/0/0 True True to_VRP-R2 Eth 1/0/0 - LAN -1 1500 38:1F:01:02:01:00
VRP-R1 Ethernet1/0/1 False True to_VRP-SW2 GE 1/0/1 - LAN -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/1.1 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/1.10 True True to_VRP-SW2 GE 1/0/1 - VLAN 10 -1 1500 38:1F:01:02:01:01
VRP-R1 Ethernet1/0/2 True True to_VRP-R3 Eth 1/0/2 - LAN -1 1500 38:1F:01:02:01:02
VRP-R1 Ethernet1/0/3 False True -1 1500 38:1F:01:02:01:03
VRP-R1 Ethernet1/0/4 False True -1 1500 38:1F:01:02:01:04
VRP-R1 Ethernet1/0/5 False True -1 1500 38:1F:01:02:01:05
VRP-R1 Ethernet1/0/6 False True -1 1500 38:1F:01:02:01:06
VRP-R1 Ethernet1/0/7 False True -1 1500 38:1F:01:02:01:07
VRP-R1 Ethernet1/0/8 False True -1 1500 38:1F:01:02:01:08
VRP-R1 Ethernet1/0/9 False True -1 1500 38:1F:01:02:01:09
VRP-R1 GigabitEthernet0/0/0 False True -1 1500 38:1F:01:02:11:10
VRP-R1 LoopBack0 True True to_VRP-SW2 GE 1/0/1 - VLAN 1 -1 1500
VRP-R1 NULL0 True True -1 1500
VRP-SW1 GE1/0/0 True True to_VRP-R2 Eth 1/0/0 - LAN -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/1 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/2 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/3 True True to_PC1 - LAN -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/4 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/5 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/6 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/7 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/8 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/9 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/10 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/11 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/12 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/13 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/14 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/15 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/16 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/17 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/18 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/19 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/20 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/21 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/22 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/23 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/24 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/25 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/26 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/27 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/28 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/29 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/30 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/31 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/32 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/33 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/34 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/35 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/36 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/37 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/38 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/39 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/40 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/41 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/42 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/43 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/44 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/45 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/46 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 GE1/0/47 False False -1 70:7B:E8:B0:04:A5
VRP-SW1 MEth0/0/0 False True -1 1500 70:7B:E8:B0:04:A4
VRP-SW1 NULL0 True True -1 1500
VRP-SW1 Vlanif30 True True -1 1500 70:7B:E8:B0:04:A5
hostname mac ïnterface vlan static
---------- ----------------- ----------- ------ --------
VRP-SW2 0A:00:27:00:00:19 GE1/0/0 1 False
VRP-SW2 38:1F:01:02:01:01 GE1/0/1 1 False
VRP-SW2 38:1F:01:02:01:01 GE1/0/1 10 False
VRP-SW1 38:1F:01:01:01:00 GE1/0/0 30 False
Conclusión
¿No les parece todo esto sorprendente? Hemos visto nuevamente como con tan pocos códigos podemos obtener tantas informaciones de una red y presentarlas así en una tabla, resumida, fácil de leer y entender. Con esas pocas funciones puedes hacer un levantamiento de toda tu red, ver que está conectado a todos tus switches, a tus routers.
Si hay un problema en tu red puedes rápidamente ver si hay interfaces Down que no deberían estar Down, ver si los switches dejaron de aprenderse alguna MAC Address.
El tiempo que te tomas en conectarse por CLI a todos estos dispositivos para obtener esta información e interpretarla se reduce en más de un 100% cuando lo haces aplicando Programabilidad de Redes.