Sơ đồ mạng:
Mô tả:
- Khai báo headers:
Vào MG-Soft Browser để biết cách viết phần payload( chọn ietf-interfaces)
Lưu ý:
Thank you.
Mô tả:
- Sơ đồ bài thực hành gồm 1 PC và 1 thiết bị chạy hđh IOS XE được đấu nối với nhau như hình 1.1.
- Trên sơ đồ này, học viên thực hiện kết nối đến thiết bị mạng, viết chương trình để chỉnh sửa ip bằng ngôn ngữ Python.
- Máy PC phải đáp ứng yêu cầu đã cài đặt trạm làm việc cho developer.
- Học viên thực hiện kết nối máy tính đến Agent bằng mạng Internet
- Cài đặt thư viện requests trên máy tính.
- Viết code bằng Python thực hiện yêu cầu:
- Lấy danh sách các cổng
- Hỏi user chọn cổng muốn chỉnh sửa địa chỉ IP
- In ra thông tin của cổng đã chọn
- Yêu cầu nhập IP và Subnet mask
- Gửi cấu hình cổng lên server
- In kết quả cổng sau chỉnh sửa (có thể dùng lại hàm ở yêu cầu số 1)
Cài đặt thư viện:
- Mở cmd bằng tổ hợp phím Win+R: gõ cmd
- Gõ python –m pip intall requests - -user
Kiểm tra đi được internet: ping 8.8.8.8
Vào sandbox của cisco để lấy thông tin CSR1000V:
Vào sandbox của cisco để lấy thông tin CSR1000V:
Viết chương trình:
- Import các thư viện và khai báo các thông tin cần để giao tiếp với thiết bịCode:
import json
Code:
[FONT=Calibri][FONT=Times New Roman]import requests[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]import sys[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]requests.packages.urllib3.disable_warnings()[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]HOST = 'ios-xe-mgmt.cisco.com'[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]PORT = '9443'[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]USER = 'developer'[/FONT][/FONT] [FONT=Times New Roman]PASS = 'C1sco12345'[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Host,port,user,pass là các thông tin lấy được ở phần C
- Xác định cổng Management( để người dùng không được chọn cổng đó để chỉnh sửa)
Code:
MANAGEMENT_INTERFACE = "GigabitEthernet1" [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Tạo url_base:
Code:
url_base = "https://{h}:{p}/restconf".format(h=HOST, p=PORT) [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Khai báo headers:
Code:
[FONT=Calibri][FONT=Times New Roman]headers = {'Content-Type': 'application/yang-data+json',[/FONT][/FONT] [FONT=Times New Roman]'Accept': 'application/yang-data+json'}[/FONT]
- Hàm lấy danh sách các cổng:
Code:
def get_configured_interfaces():
Code:
[FONT=Calibri][FONT=Times New Roman]url = url_base + "/data/ietf-interfaces:interfaces"[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]response = requests.get(url,auth=(USER, PASS),headers=headers,verify=False)[/FONT][/FONT] [FONT=Times New Roman]return response.json()["ietf-interfaces:interfaces"]["interface"][/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Tạo url để gửi bằng cách nối thêm phần cần thiết vào url_base
- Lấy thông tin bằng get bao gồm url, authentication(user và pass), headers,verify
- Cấu hình ip cổng:
Code:
def configure_ip_address(interface, ip):
Code:
[FONT=Calibri][FONT=Times New Roman]# RESTCONF URL của cổng[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]url = url_base + "/data/ietf-interfaces:interfaces/interface={i}".format(i=interface)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#Tạo payload để sửa IP[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]data = {[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"ietf-interfaces:interface":{[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"name": interface,[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"type": "iana-if-type:ethernetCsmacd",[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"ietf-ip:ipv4":{ [/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"address":{[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"ip": ip["address"],[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]"netmask": ip["mask"][/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman] }[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman] } }[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]}[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#Dùng PUT để chỉnh sửa[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]response = requests.put(url,auth=(USER, PASS),headers=headers,verify=False,[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]json=data)[/FONT][/FONT] [FONT=Times New Roman]print(response.text)[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
Vào MG-Soft Browser để biết cách viết phần payload( chọn ietf-interfaces)
Lưu ý:
- "type": "iana-if-type:ethernetCsmacd" do Router trên sandbox sử dụng loại cổng này.
- "netmask": ip["mask"] do bài lab này yêu cầu nhập netmask .
- Lấy thông tin chi tiết của cổng đã chọn:
Code:
def print_interface_details(interface):
Code:
[FONT=Calibri][FONT=Times New Roman]url = url_base + "/data/ietf-interfaces:interfaces/interface={i}".format(i=interface)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]response = requests.get(url,auth=(USER, PASS),headers=headers,verify=False)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]intf = response.json()["ietf-interfaces:interface"][/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("Name: ", intf["name"])[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]try:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("IP Address: ", intf["ietf-ip:ipv4"]["address"][0]["ip"], "/",[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]intf["ietf-ip:ipv4"]["address"][0]["netmask"])[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]except KeyError:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("IP Address: UNCONFIGURED")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print()[/FONT][/FONT] [FONT=Times New Roman]return(intf)[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Chỉ lấy phần ip và netmask nên ta sẽ vào tới phần [ip] và[netmask] của intf
- Hỏi người dùng chọn cổng nào( Nếu chọn cổng Management thì phải chọn lại:
Code:
def interface_selection(interfaces):
Code:
[FONT=Calibri][FONT=Times New Roman]sel = input("Bạn muốn cấu hình với cổng nào? ")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]while sel == MANAGEMENT_INTERFACE or not sel in [intf["name"] for intf in interfaces]:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("INVALID: Select an available interface.")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print(" " + MANAGEMENT_INTERFACE + " is used for management.")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print(" Choose another Interface")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]sel = input("Bạn muốn cấu hình với cổng nào? ")[/FONT][/FONT] [FONT=Times New Roman]return(sel)[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Ở đây ta sẽ sử dụng vòng lặp while để bắt người dùng nhập lại nếu chọn cổng management hoặc nhập sai chính tả tên cổng
- Yêu cầu người dùng nhập IP và Mask:
Code:
def get_ip_info():
Code:
[FONT=Calibri][FONT=Times New Roman]ip = {}[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]ip["address"] = input("Nhập IP address: ")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]ip["mask"] = input("Nhập subnet mask: ")[/FONT][/FONT] [FONT=Times New Roman]return(ip)[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
- Hàm main:
Code:
def main():
Code:
[FONT=Calibri][FONT=Times New Roman]#Lấy danh sách các cổng[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]interfaces = get_configured_interfaces()[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("Router có những cổng sau: \n")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]for interface in interfaces:[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print(" * {name}".format(name=interface["name"]))[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#Hỏi user chọn cổng nào[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]selected_interface = interface_selection(interfaces)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print(selected_interface)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#In ra thông tin của cổng đã chọn[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("Thông tin cổng hiện tại:")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print_interface_details(selected_interface)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#Yêu cầu người dùng nhập IP và Mask[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]ip = get_ip_info() #Gửi cấu hình cổng lên server[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]configure_ip_address(selected_interface, ip)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]#In kết quả[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print("Thông tin cổng sau cấu hình:")[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]print_interface_details(selected_interface)[/FONT][/FONT] [FONT=Calibri][FONT=Times New Roman]if __name__ == '__main__':[/FONT][/FONT] [FONT=Times New Roman]sys.exit(main())[/FONT] [FONT=Calibri][FONT=Times New Roman][/FONT][/FONT]
Thank you.
Nguồn : VNPRO