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ị:
- 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 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