Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

Lab : Sử dụng NETCONF kết nối đến thiết bị IOS XE ( Phần 2 )

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lab : Sử dụng NETCONF kết nối đến thiết bị IOS XE ( Phần 2 )

    Part 4: Sử dụng ncclient để lấy cấu hình

    Trong Phần 4, sử dụng NETCONF ncclient để truy xuất cấu hình của R1, cập nhật cấu hình và tạo giao diện mới. Chúng ta cũng sẽ tìm hiểu lý do tại sao hỗ trợ giao dịch của NETCONF lại quan trọng để nhận được các thay đổi mạng nhất quán.

    Step 1: Sử dụng hàm get_config () để truy xuất cấu hình đang chạy cho R1.

    a. Chúng ta có thể sử dụng phương thức get_config () của đối tượng phiên m NETCONF để truy xuất cấu hình cho R1. Phương thức get_config () cần chuỗi nguồn thông số chỉ định nguồn kho dữ liệu NETCONF . Sử dụng chức năng in để hiển thị kết quả. Kho dữ liệu NETCONF duy nhất hiện có trên R1 là kho dữ liệu đang chạy. Có thể xác minh điều này bằng lệnh show netconf-yang datastores. Nếu muốn bỏ qua việc hiển thị đầu ra từ Phần 3, hãy đánh dấu comment khối câu lệnh in capabilities, như được hiển thị trong phần sau:
    Code:
    [FONT=Courier New]'''[/FONT]
    [FONT=Courier New]print("#Supported Capabilities (YANG models):")[/FONT]
    [FONT=Courier New]for capability in m.server_capabilities:[/FONT]
    [FONT=Courier New]print(capability)[/FONT]
    [FONT=Courier New]'''[/FONT]
    
    [FONT=Courier New]netconf_reply = m.get_config(source="running")[/FONT]
    [FONT=Arial]print(netconf_reply)[/FONT]
    b. Lưu và chạy chương trình của bạn. Đầu ra sẽ có hơn 100 dòng, vì vậy IDLE có thể nén chúng. Bấm đúp vào Squeezed text trong cửa sổ IDLE shell để mở rộng đầu ra.
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" encoding="UTF-8"?>[/FONT]
    [FONT=Courier New]<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:b146b877-ba9a-45bc-8219-31732d1708dd" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" ><data><native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native"><version>16.9</version><boot-start-marker/><boot-end-marker/><service><timestamps><debug><datetime><msec></msec></datetime></debug><log><datetime><msec/></datetime></log></timestamps></service><hostname>R1</hostname>[/FONT]
    [FONT=Courier New]<output omitted>[/FONT]
    c. Lưu ý rằng XML trả về không được định dạng. Bạn có thể sao chép nó ra cùng một trang mà bạn đã tìm thấy trong Phần 2 để cải tiến XML.
    Code:
    [FONT=Courier New]<?xml version="1.0" encoding="UTF-8"?>[/FONT]
    [FONT=Courier New]<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:b146b877-ba9a-45bc-8219-31732d1708dd">[/FONT]
    [FONT=Courier New]<data>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<version>16.9</version>[/FONT]
    [FONT=Courier New]<boot-start-marker />[/FONT]
    [FONT=Courier New]<boot-end-marker />[/FONT]
    [FONT=Courier New]<service>[/FONT]
    [FONT=Courier New]<timestamps>[/FONT]
    [FONT=Courier New]<debug>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec />[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</debug>[/FONT]
    [FONT=Courier New]<log>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec />[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</log>[/FONT]
    [FONT=Courier New]</timestamps>[/FONT]
    [FONT=Courier New]</service>[/FONT]
    [FONT=Courier New]<hostname>R1</hostname>[/FONT]
    [FONT=Courier New]<output omitted>[/FONT]
    Step 2: Sử dụng Python để định dạng XML dễ nhìn hơn.

    Python đã tích hợp hỗ trợ để làm việc với các tệp XML. Mô-đun xml.dom.minidom có thể được sử dụng để làm đẹp đầu ra với hàm toprettyxml().

    a. Khi bắt đầu tập lệnh của bạn, hãy thêm một câu lệnh để nhập mô-đun xml.dom.minidom. Sau đó, thay thế chức năng in đơn giản print(netconf_reply) bằng phiên bản in đầu ra XML được chỉnh sửa.
    Code:
    [FONT=Courier New]import xml.dom.minidom[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    b. Lưu và chạy chương trình. Mở rộng đầu ra để xem XML được hiển thị ở định dạng dễ đọc hơn.
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" ?>[/FONT]
    [FONT=Courier New]<rpc-reply message-id="urn:uuid:0fc605b5-bf01-44c2-9830-1c092db3afa7" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" >[/FONT]
    [FONT=Courier New]<data>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<version>16.9</version>[/FONT]
    [FONT=Courier New]<boot-start-marker/>[/FONT]
    [FONT=Courier New]<boot-end-marker/>[/FONT]
    [FONT=Courier New]<service>[/FONT]
    [FONT=Courier New]<timestamps>[/FONT]
    [FONT=Courier New]<debug>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec/>[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</debug>[/FONT]
    [FONT=Courier New]<log>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec/>[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</log>[/FONT]
    [FONT=Courier New]</timestamps>[/FONT]
    [FONT=Courier New]</service>[/FONT]
    [FONT=Courier New]<hostname>R1</hostname>[/FONT]
    Step 3: Sử dụng bộ lọc filter với get_config() để chỉ lấy mô hình YANG chỉ định.

    Quản trị viên mạng chỉ có thể muốn truy xuất một phần cấu hình đang chạy trên thiết bị. NETCONF chỉ hỗ trợ trả về dữ liệu được xác định trong tham số bộ lọc của hàm get_conf().

    a. Tạo một biến có tên là netconf_filter chỉ lấy dữ liệu được xác định bởi mô hình Cisco IOS XE Native YANG.
    Code:
    [FONT=Courier New]netconf_filter = """[/FONT]
    [FONT=Courier New]<filter>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native" />[/FONT]
    [FONT=Courier New]</filter>[/FONT]
    [FONT=Courier New]"""[/FONT]
    [FONT=Courier New]netconf_reply = m.get_config(source="running", filter=netconf_filter)[/FONT]
    b. Lưu và chạy chương trình của bạn. Mở rộng đầu ra để xem XML được hiển thị ở định dạng dễ đọc hơn. Sự bắt đầu của đầu ra là như nhau, như được hiển thị dưới đây. Tuy nhiên, phần còn lại của đầu ra chỉ bao gồm các mô hình YANG được chỉ định.
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" ?>[/FONT]
    [FONT=Courier New]<rpc-reply message-id="urn:uuid:a3e46a28-07b4-4e8d-964c-647cb565e7a1" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" >[/FONT]
    [FONT=Courier New]<data>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<version>16.9</version>[/FONT]
    [FONT=Courier New]<boot-start-marker/>[/FONT]
    [FONT=Courier New]<boot-end-marker/>[/FONT]
    [FONT=Courier New]<service>[/FONT]
    [FONT=Courier New]<timestamps>[/FONT]
    [FONT=Courier New]<debug>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec/>[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</debug>[/FONT]
    [FONT=Courier New]<log>[/FONT]
    [FONT=Courier New]<datetime>[/FONT]
    [FONT=Courier New]<msec/>[/FONT]
    [FONT=Courier New]</datetime>[/FONT]
    [FONT=Courier New]</log>[/FONT]
    [FONT=Courier New]</timestamps>[/FONT]
    [FONT=Courier New]</service>[/FONT]
    [FONT=Courier New]<hostname>R1</hostname>[/FONT]
    [FONT=Courier New](output omitted)[/FONT]
    c. Lọc dữ liệu được truy xuất để chỉ hiển thị mô-đun YANG gốc làm giảm đáng kể đầu ra của bạn. Điều này là do mô-đun YANG riêng chỉ bao gồm một tập hợp con của tất cả các mô hình Cisco IOX XE YANG.


    Part 5: Sử dụng ncclient để cấu hình thiết bị

    Trong Phần 5, bạn sẽ sử dụng ncclient để cấu hình R1 bằng phương thức edit_config() của mô đun quản lý.

    Step 1: Sử dụng ncclient để chỉnh sửa hostname cho R1.

    Ghi chú: Sẽ ổn nếu nhiều học viên truy cập cùng một lúc và thay đổi tên máy chủ. Bạn sẽ tìm kiếm phản hồi <ok /> từ NETCONF để xác nhận cấu hình của bạn đã được gửi và áp dụng thành công. Tên máy chủ hiện tại không quan trọng.

    a. Để cập nhật cài đặt hiện có trong cấu hình cho R1, bạn có thể trích xuất vị trí cài đặt từ cấu hình được truy xuất trong Phần 4. Đối với bước này, bạn sẽ đặt một biến để thay đổi giá trị <hostname>.
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" ?>[/FONT]
    [FONT=Courier New]<rpc-reply message-id="urn:uuid:a3e46a28-07b4-4e8d-964c-647cb565e7a1" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" >[/FONT]
    [FONT=Courier New]<data>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New](output omitted)[/FONT]
    [FONT=Courier New]<hostname>R1</hostname>[/FONT]
    [FONT=Courier New](output omitted)[/FONT]
    b. Trước đây, bạn đã xác định biến <filter>. Để sửa đổi cấu hình thiết bị, bạn sẽ xác định biến <config>. Thêm biến sau vào tập lệnh ncclient_netconf.py của bạn. Bạn có thể sử dụng NEWHOSTNAME hoặc bất kỳ tên máy chủ nào bạn muốn.
    Code:
    [FONT=Courier New]netconf_hostname = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<hostname>NEWHOSTNAME</hostname>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    c. Sử dụng hàm edit_config() của đối tượng phiên m NETCONF để gửi cấu hình và lưu trữ các kết quả trong biến netconf_reply để chúng có thể được in. Các tham số cho hàm edit_config() như sau:
    • target – đối tượng kho lưu trữ NETCONF cần được cập nhật.
    • config – cấu hình chỉnh sửa cần được gửi
    Code:
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_hostname)[/FONT]
    d. Hàm edit_config () trả về thông báo trả lời RPC XML với <ok /> cho biết thay đổi đã được áp dụng thành công. Lặp lại câu lệnh in trước để hiển thị kết quả.
    Code:
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    e. Lưu và chạy chương trình của bạn. Bạn sẽ nhận được đầu ra tương tự như đầu ra được hiển thị dưới đây. Bạn cũng có thể xác minh rằng tên máy chủ cho R1 đã thay đổi bằng cách truy cập R1 CLI.
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" ?>[/FONT]
    [FONT=Courier New]<rpc-reply message-id="urn:uuid:8d8e1f04-1aa4-47c9-92d5-2a8981322f8f" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" >[/FONT]
    [FONT=Courier New]<ok/>[/FONT]
    [FONT=Courier New]</rpc-reply>[/FONT]
    
    [FONT=Courier New]>>>[/FONT]
    f. Thay đổi hostname trở về lại R1.

    Step 2: Sử dụng ncclient để tạo loopback interface mới trên R1.

    a. Đánh dấu commnet code từ bước trước nếu bạn muốn tránh thay đổi hostname một lần nữa.

    b. Tạo một biến <config> mới để giữ cấu hình cho giao diện loopback mới. Thêm phần sau vào tập lệnh ncclient_netconf.py của bạn. Nếu nhiều học viên đang truy cập R1 cùng một lúc, hãy sử dụng loopback được chỉ định bởi người hướng dẫn. Nếu không, bạn có thể sử dụng loopback 1, như hiển thị bên dưới.

    Ghi chú: Thay thế [Tên sinh viên] bằng tên của bạn. Để lại dấu gạch chéo ngược (\) trong lệnh mô tả. Ký tự thoát, dấu gạch chéo ngược (\), cho phép giải thích thay thế cho trích dẫn đơn (') là dấu nháy đơn. Các ký tự thoát cho phép các ký tự đặc biệt được sử dụng bên trong khai báo chuỗi. Trích dẫn duy nhất thường được sử dụng để ghi chú bắt đầu hoặc kết thúc khai báo chuỗi.
    Code:
    [FONT=Courier New]netconf_loopback = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<interface>[/FONT]
    [FONT=Courier New]<Loopback>[/FONT]
    [FONT=Courier New]<name>1</name>[/FONT]
    [FONT=Courier New]<description>[Student Name]\'s loopback</description>[/FONT]
    [FONT=Courier New]<ip>[/FONT]
    [FONT=Courier New]<address>[/FONT]
    [FONT=Courier New]<primary>[/FONT]
    [FONT=Courier New]<address>10.1.1.1</address>[/FONT]
    [FONT=Courier New]<mask>255.255.255.0</mask>[/FONT]
    [FONT=Courier New]</primary>[/FONT]
    [FONT=Courier New]</address>[/FONT]
    [FONT=Courier New]</ip>[/FONT]
    [FONT=Courier New]</Loopback>[/FONT]
    [FONT=Courier New]</interface>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    c. Nhận xét biến netconf_repply trước đó nếu bạn muốn tránh thay đổi tên máy chủ một lần nữa. Thêm chức năng edit_config() sau vào ncclient_netconf.py của bạn để gửi cấu hình loopback mới tới R1 và sau đó in ra kết quả.
    Code:
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_loopback)[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    d. Lưu và chạy chương trình. Chúng ta có thể lấy được kết quả đầu ra như bên dưới:
    Code:
    [FONT=Courier New]================= RESTART: /home/student/ncclient-netconf.py =================[/FONT]
    [FONT=Courier New]<?xml version="1.0" ?>[/FONT]
    [FONT=Courier New]<rpc-reply message-id="urn:uuid:6407b416-2851-4eca-bbfa-7afbc6e8fbcf" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" >[/FONT]
    [FONT=Courier New]<ok/>[/FONT]
    [FONT=Courier New]</rpc-reply>[/FONT]
    
    [FONT=Courier New]>>>[/FONT]
    e. Trên R1, kiểm tra loopback interface đã được tạo.
    Code:
    [FONT=Courier New]R1# [B]show ip interface brief[/B][/FONT]
    [FONT=Courier New]Interface IP-Address OK? Method Status Protocol[/FONT]
    [FONT=Courier New]GigabitEthernet0/0/0 unassigned YES unset down down[/FONT]
    [FONT=Courier New]GigabitEthernet0/0/1 192.168.1.1 YES manual up up[/FONT]
    [FONT=Courier New]Serial0/1/0 unassigned YES unset up up[/FONT]
    [FONT=Courier New]Serial0/1/1 unassigned YES unset up up[/FONT]
    [FONT=Courier New]GigabitEthernet0 unassigned YES unset down down[/FONT]
    [FONT=Courier New]Loopback1 10.1.1.1 YES other up up[/FONT]
    Step 3: Cố gắng tạo giao diện loopback mới có cùng địa chỉ IPv4.

    a. Tạo một biến mới gọi là netconf_newloop. Nó sẽ giữ một cấu hình tạo giao diện loopback 2 mới nhưng có cùng địa chỉ IPv4 như trên loopback 1: 10.1.1.1./24. Tại router CLI, điều này sẽ tạo ra lỗi do cố gắng gán địa chỉ IP trùng lặp cho cổng.

    Ghi chú: Nếu nhiều sinh viên đang truy cập cùng một lúc, hãy tăng số hiệu của loopback thêm 1 giá trị được chỉ định bởi người hướng dẫn của bạn. Nếu không, bạn có thể sử dụng loopback 2, như hiển thị bên dưới.
    Code:
    [FONT=Courier New]netconf_newloop = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<interface>[/FONT]
    [FONT=Courier New]<Loopback>[/FONT]
    [FONT=Courier New]<name>2</name>[/FONT]
    [FONT=Courier New]<description>[Student Name]’s loopback</description>[/FONT]
    [FONT=Courier New]<ip>[/FONT]
    [FONT=Courier New]<address>[/FONT]
    [FONT=Courier New]<primary>[/FONT]
    [FONT=Courier New]<address>10.1.1.1</address>[/FONT]
    [FONT=Courier New]<mask>255.255.255.0</mask>[/FONT]
    [FONT=Courier New]</primary>[/FONT]
    [FONT=Courier New]</address>[/FONT]
    [FONT=Courier New]</ip>[/FONT]
    [FONT=Courier New]</Loopback>[/FONT]
    [FONT=Courier New]</interface>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    b. Thêm chức năng edit_config () sau vào ncclient_netconf.py của bạn để gửi cấu hình loopback mới tới R1. Bạn không cần một câu lệnh in cho bước này.
    Code:
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_newloop)[/FONT]
    c. Lưu và chạy chương trình. Bạn sẽ nhận được đầu ra lỗi tương tự như sau:
    Code:
    [FONT=Courier New]============ RESTART: /home/student/Documents/ncclient-netconf.py ============[/FONT]
    [FONT=Courier New]Traceback (most recent call last):[/FONT]
    [FONT=Courier New]File "/home/student/Documents/ncclient-netconf.py", line 71, in <module>[/FONT]
    [FONT=Courier New]netconf_reply2=m.edit_config(target='running', config = netconf_newloop)[/FONT]
    [FONT=Courier New]File "/home/student/.local/lib/python3.6/site-packages/ncclient/manager.py", line 236, in execute[/FONT]
    [FONT=Courier New]huge_tree=self._huge_tree).request(*args, **kwds)[/FONT]
    [FONT=Courier New]File "/home/student/.local/lib/python3.6/site-packages/ncclient/operations/edit.py", line 69, in request[/FONT]
    [FONT=Courier New]return self._request(node)[/FONT]
    [FONT=Courier New]ncclient.operations.rpc.RPCError: inconsistent value: Device refused one or more commands[/FONT]
    [FONT=Courier New]>>>[/FONT]
    d. Không giống như sử dụng netmiko hoặc sao chép và dán script, NETCONF sẽ không áp dụng bất kỳ cấu hình nào được gửi nếu một hoặc nhiều lệnh bị từ chối. Để xác minh điều này, hãy nhập lệnh show giao diện ip trên R1. Lưu ý rằng giao diện mới của bạn chưa được tạo.
    Code:
    [FONT=Courier New]R1# [B]show ip interface brief[/B][/FONT]
    [FONT=Courier New]Interface IP-Address OK? Method Status Protocol[/FONT]
    [FONT=Courier New]GigabitEthernet0/0/0 unassigned YES unset down down[/FONT]
    [FONT=Courier New]GigabitEthernet0/0/1 192.168.1.1 YES manual up up[/FONT]
    [FONT=Courier New]Serial0/1/0 unassigned YES unset up up[/FONT]
    [FONT=Courier New]Serial0/1/1 unassigned YES unset up up[/FONT]
    [FONT=Courier New]GigabitEthernet0 unassigned YES unset down down[/FONT]
    [FONT=Courier New]Loopback1 10.1.1.1 YES other up up[/FONT]


    Part 6: Chương trình được sử dụng trong lab này

    Sau đây là chương trình hoàn chỉnh được tạo ra trong lab này. Code từ Part 5, Step 3 được đánh dấu comment để bạn có thể chạy script mà không gặp lỗi. Script của bạn có thể trông khác nhau. Thực hành các kỹ năng Python của bạn bằng cách sửa đổi chương trình để gửi các lệnh xác minh và cấu hình khác nhau.
    Code:
    [FONT=Courier New]from ncclient import manager[/FONT]
    [FONT=Courier New]import xml.dom.minidom[/FONT]
    
    [FONT=Courier New]m = manager.connect([/FONT]
    [FONT=Courier New]host="192.168.1.1",[/FONT]
    [FONT=Courier New]port=830,[/FONT]
    [FONT=Courier New]username="cisco",[/FONT]
    [FONT=Courier New]password="cisco123!",[/FONT]
    [FONT=Courier New]hostkey_verify=False[/FONT]
    [FONT=Courier New])[/FONT]
    
    [FONT=Courier New]print("#Supported Capabilities (YANG models):")[/FONT]
    [FONT=Courier New]for capability in m.server_capabilities:[/FONT]
    [FONT=Courier New]print(capability)[/FONT]
    
    
    [FONT=Courier New]netconf_reply = m.get_config(source="running")[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    
    [FONT=Courier New]netconf_filter = """[/FONT]
    [FONT=Courier New]<filter>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native" />[/FONT]
    [FONT=Courier New]</filter>[/FONT]
    [FONT=Courier New]"""[/FONT]
    [FONT=Courier New]netconf_reply = m.get_config(source="running", filter=netconf_filter)[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    
    [FONT=Courier New]netconf_hostname = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<hostname>NEWHOSTNAME</hostname>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_hostname)[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    
    [FONT=Courier New]netconf_loopack = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<interface>[/FONT]
    [FONT=Courier New]<Loopback>[/FONT]
    [FONT=Courier New]<name>1</name>[/FONT]
    [FONT=Courier New]<description>[Student Name]'s loopback</description>[/FONT]
    [FONT=Courier New]<ip>[/FONT]
    [FONT=Courier New]<address>[/FONT]
    [FONT=Courier New]<primary>[/FONT]
    [FONT=Courier New]<address>10.1.1.1</address>[/FONT]
    [FONT=Courier New]<mask>255.255.255.0</mask>[/FONT]
    [FONT=Courier New]</primary>[/FONT]
    [FONT=Courier New]</address>[/FONT]
    [FONT=Courier New]</ip>[/FONT]
    [FONT=Courier New]</Loopback>[/FONT]
    [FONT=Courier New]</interface>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_loopack)[/FONT]
    [FONT=Courier New]print(xml.dom.minidom.parseString(netconf_reply.xm l).toprettyxml())[/FONT]
    
    [FONT=Courier New]'''[/FONT]
    [FONT=Courier New]netconf_newloop = """[/FONT]
    [FONT=Courier New]<config>[/FONT]
    [FONT=Courier New]<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">[/FONT]
    [FONT=Courier New]<interface>[/FONT]
    [FONT=Courier New]<Loopback>[/FONT]
    [FONT=Courier New]<name>2</name>[/FONT]
    [FONT=Courier New]<description>[Student Name]’s loopback</description>[/FONT]
    [FONT=Courier New]<ip>[/FONT]
    [FONT=Courier New]<address>[/FONT]
    [FONT=Courier New]<primary>[/FONT]
    [FONT=Courier New]<address>10.1.1.1</address>[/FONT]
    [FONT=Courier New]<mask>255.255.255.0</mask>[/FONT]
    [FONT=Courier New]</primary>[/FONT]
    [FONT=Courier New]</address>[/FONT]
    [FONT=Courier New]</ip>[/FONT]
    [FONT=Courier New]</Loopback>[/FONT]
    [FONT=Courier New]</interface>[/FONT]
    [FONT=Courier New]</native>[/FONT]
    [FONT=Courier New]</config>[/FONT]
    [FONT=Courier New]"""[/FONT]
    
    [FONT=Courier New]netconf_reply = m.edit_config(target="running", config=netconf_newloop)[/FONT]
    [FONT=Courier New]'''[/FONT]


    Bảng tổng hợp cổng Router
    ​​​​​​


    Note: Để tìm hiểu cách cấu hình router, hãy xem các interface để xác định loại router và số lượng cổng của router. Không có cách nào để liệt kê hiệu quả tất cả các kết hợp cấu hình cho từng lớp router. Bảng này bao gồm các mã định danh cho các kết hợp cổng Ethernet và Serial có thể có trong thiết bị. Bảng không bao gồm bất kỳ loại giao diện nào khác, mặc dù một router cụ thể có thể chứa một loại interface. Một ví dụ về điều này có thể là cổng ISDN BRI. Chuỗi trong ngoặc đơn là tên viết tắt hợp pháp có thể được sử dụng trong các lệnh Cisco IOS để thể hiện cổng.

    Hoàn thành bài Lab.

    Thank you.
    Nguồn : VNPRO
Working...
X