/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

Network Automation #001 - Netmiko Basic SSH To Router

Nên đọc các bài dưới đây trước khi xem bài nà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
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:
enable
conf t
hostname R_1
ip domain name netmiko.lab

username admin privilege 15 password admin1234

line vty 0 4
login local
transport input ssh
crypto key generate rsa general-keys modulus 1024
ip ssh version 2

interface Ethernet0/0
no shutdown
ip address 192.168.0.1 255.255.255.0
exit

interface Ethernet0/1
no shutdown
ip address 172.16.100.1 255.255.255.0
exit

interface Ethernet0/2
no shutdown
ip address 172.16.200.1 255.255.255.0
exit
do 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.py
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.100.1            -   aabb.cc00.1010  ARPA   Ethernet0/1
Internet  172.16.200.1            -   aabb.cc00.1020  ARPA   Ethernet0/2
Internet  192.168.0.1             -   aabb.cc00.1000  ARPA   Ethernet0/0
Internet  192.168.0.48            0   94de.80a6.fb30  ARPA   Ethernet0/0

C:\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.py

So interface UP cua thiet bi la: 3

C:\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.py

So interface DOWN cua thiet bi la: 5
Thong 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!

4 comments:

  1. 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ế?

    ReplyDelete
    Replies
    1. hiệ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

      Delete
  2. cho em hỏi bh mình muốn học network-automation từ đầu. thì học ở đâu ạ

    ReplyDelete

/*header slide*/