Sơ đồ mạng:
Các bước thực hiện:
Viết chương trình:
Tạo file device_info.py để ghi thông tin thiết bị:
Các thông tin:
Import các thư viện cần thiết:
Viết bộ lọc XML cho truy vấn Netconf:
In kết quả trả về dạng XML:
Kết quả:
Complete.
Thank you.
Các bước thực hiện:
Cài đặt thư viện:
- [*=2]Mở cmd bằng tổ hợp phím Win+R: gõ cmd [*=2]Gõ python –m pip intall ncclient - -user
- [*=2]Gõ python –m pip intall xmltodict - -user
Kiểm tra đi được internet: Ping 8.8.8.8
Vào sandbox của cisco để lấy thông tin CSR1000V:
- [*=2]Vào chrome search từ khóa: devnet sandbox tìm trang như hình
- [*=2]Đăng nhập
- [*=2]Sau khi đăng nhập xong sẽ hiện lên giao diện web tất cả sandbox lab
- [*=2]Vào chỗ search gõ IOS XE để tìm kiếm các lab sử dụng IOS XE, chọn lab có tên như hình (Recommended Code AlwaysOn)
- [*=2]Ở phía bên trái kéo xuống phần Access Details ta có được thông tin để kết nối đến CSR1000V
Viết chương trình:
Tạo file device_info.py để ghi thông tin thiết bị:
Code:
[SIZE=18px]iosxe = { "address": "ios-xe-mgmt.cisco.com", "netconf_port": 10000, "restconf_port": 9443, "ssh_port": 8181, "username": "developer", "password": "C1sco12345" }[/SIZE]
- netconf_port, restconf_port,ssh_port là các port do thiết bị trên Sandbox đặt.
- username, password là tên và mật khẩu khi cấu hình SSH
Import các thư viện cần thiết:
Code:
[SIZE=18px]from ncclient import manager import sys import xmltodict import xml.dom.minidom from device_info import iosxe as device[/SIZE]
Code:
[SIZE=18px]netconf_filter = """ <filter> <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"> <interface></interface> </interfaces> </filter>"""[/SIZE]
- 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.
Code:
[SIZE=18px]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)[/SIZE]
- 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
In kết quả trả về dạng XML:
Code:
[SIZE=18px]print("Here is the raw XML data returned from the device.\n") print(xml.dom.minidom.parseString(netconf_reply.xml).toprettyxml()) print("")[/SIZE]
- xml.dom.minidom.parseString(netconf_reply.xml).top rettyxml() dùng để in kết quả trả về giúp ta dễ đọc hơn
Code:
[SIZE=18px]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")[/SIZE]
- 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
Kết quả:
Complete.
Thank you.
Nguồn : VNPRO