Nên đọc các bài dưới đây trước khi xem bài này:
- Cài đặt python tại đây
- Dictionnary trong python tại đây
- Import thư viện tại đây
- Cách cấu hình ssh tại đây
- Cách xử lý file tại đây
- Loop if tại đây
- Lab netmiko Căn bản tại đây
Sơ đồ lab:
Yêu cầu:
Dùng thư viện netmiko để SSH vào R_1 và thực hiện:
1. Show arp
2. Kiểm tra xem R_1 có bao nhiêu interface ở trạng thái up
2. Kiểm tra xem R_1 có bao nhiêu interface ở trạng thái up
3. Ghi thông tin của interface vào file int_down.txt nếu chúng có trạng thái
down và hiện thị tổng số interface có trạng thái down.
Thực hiện:
- Chuẩn bị:
Cấu hình trên R_1:
enableconf thostname R_1ip domain name netmiko.labusername admin privilege 15 password admin1234line vty 0 4login localtransport input sshcrypto key generate rsa general-keys modulus 1024ip ssh version 2interface Ethernet0/0no shutdownip address 192.168.0.1 255.255.255.0exitinterface Ethernet0/1no shutdownip address 172.16.100.1 255.255.255.0exitinterface Ethernet0/2no shutdownip address 172.16.200.1 255.255.255.0exitdo wri
- Netmiko:
1. Show arp
Code:
import netmiko # import thư viện netmiko
# định nghĩa dictionnary với các tham số đã cấu hình trong phần chuẩn bị
R_1 = {
"host":"192.168.0.1",
"username":"admin",
"password":"admin1234",
"device_type":"cisco_ios"
}
# dùng hàm ConnectHandler trong thư viện netmiko để kết nối với R_1 với các thông tin đã định nghĩa trong dictionnary
net_connect = netmiko.ConnectHandler(**R_1)
show_arp = net_connect.send_command("show arp") # thực hiện lênh show arp
print (show_arp)
Kết quả:
C:\python>python Demo.pyProtocol Address Age (min) Hardware Addr Type InterfaceInternet 172.16.100.1 - aabb.cc00.1010 ARPA Ethernet0/1Internet 172.16.200.1 - aabb.cc00.1020 ARPA Ethernet0/2Internet 192.168.0.1 - aabb.cc00.1000 ARPA Ethernet0/0Internet 192.168.0.48 0 94de.80a6.fb30 ARPA Ethernet0/0C:\python>
2. Kiểm tra xem R_1 có bao nhiêu interface ở trạng thái up
Code:
from netmiko import ConnectHandler # cách import này chúng ta có thể gọi hàm ConnectHandler trực tiếp
R_1 = {
"host":"192.168.0.1",
"username":"admin",
"password":"admin1234",
"device_type":"cisco_ios"
}
# gọi hàm ConnectHandler trực tiếp
net_connect = ConnectHandler(**R_1)
output = net_connect.send_command("show ip int brief") # thực hiện lênh show ip int brief
dem = 0 # khởi tạo biến đếm
for line in output.splitlines():
if "Interface" in line: # bỏ dòng đầu tiên
continue
elif "up" in line: # nếu trạng thái up thì
dem += 1 # tăng lên 1
print("So interface UP cua thiet bi la:",dem)
Kết quả:
C:\python>python Demo.pySo interface UP cua thiet bi la: 3C:\python>
3. Ghi thông tin của interface vào file int_down.txt nếu chúng có trạng
thái down và hiện thị tổng số interface có trạng thái down.
Code:
from netmiko import ConnectHandler # cách import này chúng ta có thể gọi hàm ConnectHandler trực tiếp
import os # thư viện để lấy đường dẫn hiện tại
R_1 = {
"host":"192.168.0.1",
"username":"admin",
"password":"admin1234",
"device_type":"cisco_ios"
}
# gọi hàm ConnectHandler trực tiếp
net_connect = ConnectHandler(**R_1)
output = net_connect.send_command("show ip int brief") # thực hiện lênh show ip int brief
path = os.getcwd() # lấy đường dẫn hiện tại gán vào biến path
filename = "int_down.txt"
int_status = "down"
dem = 0 # khởi tạo biến đếm
for line in output.splitlines():
if "Interface" in line: # bỏ dòng đầu tiên
continue
elif int_status in line: # nếu trạng thái down thì
with open (filename,"a") as afile: # ghi file append/ghi vào cuối file
afile.write(line)
dem += 1 # tăng lên 1
print("So interface DOWN cua thiet bi la:",dem)
print("Thong tin duoc luu vao file '{}' duong dan la '{}'".format(filename,path))
Kết quả:
C:\python>python Demo.pySo interface DOWN cua thiet bi la: 5Thong tin duoc luu vao file 'int_down.txt' duong dan la 'C:\python'C:\python>
Các bạn có thể mở file int_down.txt để xem kết quả.
Các common thường sử dụng trong phương thức netmiko:
- net_connect.send_command() - Send command down the channel, return output back (pattern based)
- net_connect.send_command_timing() - Send command down the channel, return output back (timing based)
- net_connect.send_config_set() - Send configuration commands to remote device
- net_connect.send_config_from_file() - Send configuration commands loaded from a file
- net_connect.save_config() - Save the running-config to the startup-config
- net_connect.enable() - Enter enable mode
- net_connect.find_prompt() - Return the current router prompt
- net_connect.commit() - Execute a commit action on Juniper and IOS-XR
- net_connect.disconnect() - Close the connection
- net_connect.write_channel() - Low-level write of the channel
- net_connect.read_channel() - Low-level write of the channel
Xong!
Cho mình hỏi bạn làm cách nào để chạy code python của bài lab trên windows thế?
ReplyDeletemình lab trên eve
Deletehiện tại đang chạy python trên windows kết nối vào thiết bị trên lab eve. để chạy python trên windows: vào cmd -> python TenFilePython.py. xem bài căn bản có hướng dẫn nhé https://khanhvc.blogspot.com/2020/08/python-hoc-python-qua-vi-du-001-vi-du.html
Deletecho em hỏi bh mình muốn học network-automation từ đầu. thì học ở đâu ạ
ReplyDelete