Yêu cầu: Dùng Netmiko để SSH vào switch sau đó tìm thiết bị có IP 192.168.0.101 đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó:
1. Thực hiện trên Cisco - IOS
2. Thực hiện trên Juniper - JunOS
Thực hiện:
1. Thực hiện trên Cisco - IOS
- Chuẩn bị (cấu hình trên Cisco switch ):
- Code:
'''Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó
(Điều kiện là thiết bị cisco cần kết nối đã được cấu hình SSH)
Câu lệnh chính dùng trong bài:
- show arp <ip cần tìm>
- show mac address-table address <địa chỉ mac cần tìm>
'''
import netmiko # import thư viện netmiko
# Thông tin thiết bị cần SSH vào (định nghĩa dictionnary)
Sw_1 = {
"host":"192.168.0.1",
"username":"admin",
"password":"admin1234@core",
"device_type":"cisco_ios"
}
print("Connecting to a host: " + 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 = netmiko.ConnectHandler(**Sw_1)
ip_addr = "192.168.0.101" # địa chỉ ip cần tìm
net_connect.send_command("ping" + " " + ip_addr) # ping địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC
show_arp = "show arp" + " " + ip_addr
show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm
# In ra dòng thứ nhì trong chuỗi
# print (show_arp.splitlines()[1])
# lấy dòng thứ nhì và phân ra từng cụm
fields = show_arp.splitlines()[1].split()
# lấy cụm thứ 4 (là địa chỉ MAC) tính từ trái sang, sau đó sẽ thực hiện lệnh show mac với MAC này
mac_addr = fields[3]
# print (mac_addr)
show_mac_addr = "show mac address-table address" + " " + mac_addr
show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show
print ("*" * 20 + "KET QUA" + "*" * 20)
print(show_mac_addr)
- Kết quả:
Connecting to a host: 192.168.0.1...********************KET QUA********************Mac Address Table-------------------------------------------Vlan Mac Address Type Ports---- ----------- -------- -----1 0050.7966.6807 DYNAMIC Et0/0Total Mac Addresses for this criterion: 1[Finished in 8.8s]
Kết quả cho chúng ta thấy IP 192.168.0.101 được kết nối vào port
Et0/0 của switch
192.168.0.1
2. Thực hiện trên Juniper - JunOS
- Chuẩn bị (cấu hình trên Juniper switch ):
Tham khảo cấu hình Juniper tại link
Noted: Lab Juniper mình làm trên thiết bị thật, nên port sẽ không giống như hình ở trên
- Code:
'''
Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó
(Điều kiện là thiết bị Juniper cần kết nối đã được cấu hình SSH)
Câu lệnh chính dùng trong bài:
- show arp hostname <ip cần tìm>
- show ethernet-switching table <địa chỉ mac cần tìm>
'''
import netmiko # import thư viện netmiko
# Thông tin thiết bị cần SSH vào (định nghĩa dictionnary)
Sw_1 = {
"host":"192.168.0.1",
"username":"admin",
"password":"admin1234@core",
"device_type":"juniper_junos"
}
print("Connecting to a host: " + 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 = netmiko.ConnectHandler(**Sw_1)
ip_addr = "192.168.0.101" # địa chỉ ip cần tìm
net_connect.send_command("ping" + " " + ip_addr + " " + "count 4") # ping (ping 4 gói) địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC
show_arp = "show arp" + " " + "hostname" + " " + ip_addr
show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm
# print (show_arp)
# In ra dòng thứ nhì trong chuỗi
# print (show_arp.splitlines()[1])
# lấy dòng thứ nhì và phân ra từng cụm
fields = show_arp.splitlines()[1].split()
# lấy cụm đầu tiên (là địa chỉ MAC) tính từ trái sang
mac_addr = fields[0]
# print (mac_addr)
show_mac_addr = "show ethernet-switching table" + " " + mac_addr
show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show
print ("*" * 20 + "KET QUA" + "*" * 20)
print(show_mac_addr)
- Kết quả:
Connecting to a host: 192.168.0.1...********************KET QUA********************MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MACSE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)Ethernet switching table : 87 entries, 87 learnedRouting instance : default-switchVlan MAC MAC Age Logical NH RTRname address flags interface Index IDvlan-11 d4:f5:ef:09:c0:1e D - ge-1/0/0.0 0 0[Finished in 13.1s]
Thiết bị có IP 192.168.0.101 được nối vào port ge-1/0/0 của switch 192.168.0.1
No comments:
Post a Comment