Sơ đồ mạng:
Các bước thực hiện:
Các thông tin:
+ Import các thư viện cần thiết:
xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces" là namespace( không gian tên), giúp phân biệt các thực thể cùng tên nằm trong các namespace khác nhau. VD như trong namespace N1 có object O, N2 cũng có object O. Để phân biệt object O của namespace nào thì có thể ghi N1:O để biết là object O này của N1.
Tạo kết nối đến thiết bị bằng thư viện ncclient( modun manager)
device là tên gán từ dòng “from device_info import iosxe as device” khai báo ở trên
Lưu ý: phần khoảng cách phải đúng
xml.dom.minidom.parseString(netconf_reply.xml).top rettyxml() dùng để in kết quả trả về giúp ta dễ đọc hơn
Xmltodict giúp ta chuyển từ dạng xml sang dictionary để có thể để vào vòng lặp for duyệt từng phần tử trong dictionary. Việc tạo danh sách này giúp ta biết được cổng nào đang up hay down nhanh chóng hơn.
Thank you.
Các bước thực hiện:
Cài đặt thư viện:
- Gõ python –m pip intall ncclient - -user [*=2]Mở cmd bằng tổ hợp phím Win+R: gõ cmd
- Gõ python –m pip intall xmltodict - -user
Kiểm tra đi được internet: ping 8.8.8.8
Vào lab trên EVE cấu hình router CSR1000V:
Router#configure terminal
Router(config)#int g1
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#netconf-yang
Router(config)#username admin privilege 15 password 0 cisco123
Lưu ý: netconf chỉ hoạt động từ IOS XE version 16.3 trở lên
Router(config)#int g1
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#netconf-yang
Router(config)#username admin privilege 15 password 0 cisco123
Lưu ý: netconf chỉ hoạt động từ IOS XE version 16.3 trở lên
Viết chương trình:
- [*=1]Tạo file device_info.py để ghi thông tin thiết bị:
Code:
iosxe = { "address": "192.168.1.1", "netconf_port": 830, "restconf_port": 443, "ssh_port": 22, "username": "admin", "password": "cisco123" }
- [*=2]netconf_port, restconf_port,ssh_port là các port mặc định, ta có thể chỉnh sửa sang các port còn trống khác. [*=2]username, password là tên và mật khẩu khi cấu hình SSH
- [*=1]Tạo file get_interface_list.py:
+ Import các thư viện cần thiết:
Code:
from ncclient import manager import sys import xmltodict import xml.dom.minidom from device_info import iosxe as device
+ Viết bộ lọc XML cho truy vấn Netconf:
Code:
netconf_filter = """ <filter> <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"> <interface></interface> </interfaces> </filter>"""
+ Mở kết nối đến thiết bị bằng ncclient và tạo câu truy vấn Netconf (get_config) sử dụng bộ lọc trên:
Code:
print("Opening NETCONF Connection to {}".format(device["address"])) with manager.connect( host=device["address"], port=device["netconf_port"], username=device["username"], password=device["password"], hostkey_verify=False ) as m: print("Sending a <get-config> operation to the device.\n") netconf_reply = m.get_config(source = 'running', filter = netconf_filter)
device là tên gán từ dòng “from device_info import iosxe as device” khai báo ở trên
Lưu ý: phần khoảng cách phải đúng
+ In kết quả trả về dạng XML:
Code:
print("Here is the raw XML data returned from the device.\n") print(xml.dom.minidom.parseString(netconf_reply.xml).toprettyxml()) print("")
+ Tạo danh sách interfaces và in báo cáo trang thái các cổng up/down
Code:
netconf_data = xmltodict.parse(netconf_reply.xml)["rpc-reply"]["data"] interfaces = netconf_data["interfaces"]["interface"] print("The interface status of the device is: ") for interface in interfaces: print("Interface {} enabled status is {}".format( interface["name"], interface["enabled"] ) ) print("\n")
Kết quả:
Thank you.
Nguồn : VNPRO