/*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 #009 - Exporting MAC Address From Switches Cisco IOS & TextFSM Template

 YÊU CẦU:

1. Sử dụng thư viện netmiko kết nối vào switch kết hợp với TextFSM template để export toàn bộ MAC Address và lưu vào file MAC_TextFSM_template.CSV

2. Định nghĩa TextFSM template chỉ lấy các trường: Vlan (chỉ lấy các vlan là số), Mac Address, Port là lưu thành vào file MAC_TextFSM_Custom.CSV


THỰC HIỆN:

1. Sử dụng thư viện netmiko kết nối vào switch kết hợp với TextFSM template để export toàn bộ MAC Address và lưu vào file MAC_TextFSM_template.CSV

  • Chuẩn bị:
Cài đặt thư viện:
- pip install textfsm
- pip install pandas

Tham khảo cách cài đặt thư viện tại đây

  • Code:

'''
- Kết nối switch export tất cả các MAC Address và lưu thành file MAC_TextFSM_template.CSV

- Câu lệnh sử dụng trong bài:
+ show mac address-table

- Thư viện cần cài:
+ pip install textfsm
+ pip install pandas

'''
from netmiko import ConnectHandler
import textfsm
import pandas as pd
import os

path = os.getcwd()	# lấy đường dẫn hiện tại
file_name = "MAC_TextFSM_template.CSV" # tên file cần lưu

# Thông tin thiết bị cần SSH vào (định nghĩa dictionnary)
Sw_1 = { 
	"host":"192.168.100.23",
	"username":"admin",
	"password":"admin1234",
	"device_type":"cisco_ios"
	}
	
print("Dang ket noi den thiet bi co IP: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới
# dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary
net_connect = ConnectHandler(**Sw_1) 
print("Ket noi thanh cong!")

sh_mac_addr = "show mac address-table"
sh_mac_addr = net_connect.send_command(sh_mac_addr, use_textfsm = True) # thực hiện lệnh và sử dụng thư viện TextFSM
df = pd.DataFrame(sh_mac_addr) # chuyển dữ liệu thành dạng DataFrame
df.to_csv(file_name, index = False) # thực hiện lưu file nhưng không lưu cột index
print (f"\n=====Tat ca MAC Address duoc luu vao file '{file_name}' tai '{path}'=====")


  • Kết Quả:

Dang ket noi den thiet bi co IP: 192.168.100.23...
Ket noi thanh cong!
=====Tat ca MAC Address duoc luu o file 'MAC_TextFSM_template.CSV' tai 'C:\python'=====
[Finished in 3.3s]



Nhận xét:
Khi sử dụng TextFSM để xử lý cột Mac Address đổi thành destination_address, và Ports đổi thành destination_port chúng ta khó có thể để chỉnh được theo ý.

2. Định nghĩa TextFSM template chỉ lấy các trường: Vlan (chỉ lấy các vlan là số), Mac Address, Port là lưu thành vào file MAC_TextFSM_Custom.CSV

  • Định nghĩa TextFSM Template lưu nội dung vào file show_mac_address.template
Value VLAN (\d+)
Value MAC_ADDRESS ([0-9a-fA-F]{4}(?:\.[0-9a-fA-F]{4}){2})
Value INTERFACE ([^,\s]+)

Start
  ^Vlan\s+Mac Address\s+Type\s+Ports -> TYPE1

TYPE1
  ^\s*${VLAN}\s+${MAC_ADDRESS}\s+\w+\s+${INTERFACE}(?:\s|$$) -> Record


Tham khảo TextFSM template tại đây

  • Code:

'''
- Kết nối switch export tất cả các MAC Address và lưu thành file MAC_TextFSM_Custom.CSV
- Chúng ta tự định nghĩa TextFSM template, các cột tiêu đề chúng ta cũng có thể đặt tên tùy thích và cũng có thể chọn ra/định nghĩa các vlan cần lấy ra trong file đó.

- Câu lệnh sử dụng trong bài:
+ show mac address-table

- Thư viện cần cài:
+ pip install textfsm
+ pip install pandas

'''
from netmiko import ConnectHandler
import textfsm
import pandas as pd
import os

path = os.getcwd()	# lấy đường dẫn hiện tại
file_name = "MAC_TextFSM_Custom.CSV" # tên file cần lưu
textfsm_template = 'show_mac_address.template' # tên template
# Thông tin thiết bị cần SSH vào (định nghĩa dictionnary)
Sw_1 = { 
	"host":"192.168.100.23",
	"username":"admin",
	"password":"admin1234",
	"device_type":"cisco_ios"
	}
	
print("Dang ket noi den thiet bi co IP: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới
# dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary
net_connect = ConnectHandler(**Sw_1) 
print("Ket noi thanh cong!")

sh_mac_addr = "show mac address-table"
sh_mac_addr = net_connect.send_command(sh_mac_addr) # thực hiện lệnh show
try:
	with open(textfsm_template) as template: # Mở file show_mac_address.template vừa định nghĩa
		fsm = textfsm.TextFSM(template)
		sh_mac_addr = fsm.ParseText(sh_mac_addr)
	#print(fsm.header)
	#pprint(sh_mac_addr)
	df = pd.DataFrame(sh_mac_addr) # convert dữ liệu sang kiểu DataFrame
	df.to_csv(file_name, header = fsm.header, index = False) # Ghi dữ liệu vừa trích lọc vào file với header tương ứng và không cần điền thêm cột index	
	print (f"\n=====Tat ca MAC Address duoc luu vao file '{file_name}' tai '{path}'=====")
except:
	print (f"\n=====Kiem tra file template '{textfsm_template}' tai '{path}'=====")	


  • Kết quả:



Nhận xét:
Việc tự định nghĩa template chúng ta có thể tùy chọn các trường cần lấy và phần tiêu đề của các cột chúng ta có thể đặt tên tùy thích. Với kết quả trên chúng ta thấy trường Type và các dòng vlan không phải là số sẽ không được đưa vào file MAC_TextFSM_Custom.csv


Xong!


No comments:

Post a Comment

/*header slide*/