我正在做一些networking相关的东西。 这里是我创build的代码来查找数据中心中服务器连接的Cisco交换机。 但是我们有多个cisco ostypes。 如思科IOS和NXOS。 login到每个设备获取邻居信息或mac表是更好的方法来实现这一点。 你是否有任何其他方式从IP或MAC获取Cisco交换机端口映射?
import paramiko import time import sys import os import json import re app_server_mgmt_ip = '192.168.10.20' app_switch_mgmt_ip = '192.168.20.5' username = '' password = '' ip = app_switch_mgmt_ip from netmiko import ConnectHandler cisco_ios_xrv = { 'device_type': 'cisco_xr', 'ip': app_switch_mgmt_ip, 'username': username, 'password': password, 'port' : 22, # optional, defaults to 22 'secret': 'secret', # optional, defaults to '' 'verbose': False, # optional, defaults to False } net_connect = ConnectHandler(**cisco_ios_xrv) output = net_connect.send_command('sh ver') datai222 = str(output) print datai222 output = net_connect.send_command('sh ip route '+app_server_mgmt_ip) data = str(output) displaymessage1 = data #print displaymessage1 output2 = net_connect.send_command('sh ip arp '+app_server_mgmt_ip) data2 = str(output2) ##print data2 stringsplit2 = data2.split() #print stringsplit2 stringsplit2value = stringsplit2[11].strip() displaymessage2 = data2 #print displaymessage2 #third command output3 = net_connect.send_command('ping '+app_server_mgmt_ip) data3 = str(output3) displaymessage3 = data3 #print displaymessage3 import time #time.sleep(1) #print "4th command" #print "stringsplit2value"+stringsplit2value output4 = net_connect.send_command('sh mac address-table address '+stringsplit2value) #output4 = net_connect.send_command('sh mac address-table address '+stringsplit2value) data4 = str(output4) displaymessage4 = data4 #print displaymessage4 stringsplit4 = data4.split('\n') ##print stringsplit4 stringfound4 = str(stringsplit4[7]).find('Po') #print stringfound4 if(stringfound4 == -1): print("Not found") else: stringsplit4split = stringsplit4[7].split('Po') stringsplit4splitvalue4 = stringsplit4split[1].strip()
看起来你正在使用正确的命令,但是你可能有一些错误的假设。
交换机上连接服务器的端口可以通过show mac address-tablefind,但前提是交换机最近才了解到这个mac地址。 如果交换机需要为该服务器转发二层stream量,交换机正在学习该MAC地址。
find的端口可以是服务器直接连接的端口,也可以是其他交换机连接的端口(如果该交换机位于服务器的path上)。
交换机通常不会知道服务器的IP地址。 当您ping服务器的IP地址时,您可能正在使用pipe理networking。 由于这通常是不同的networking,ARP表将显示服务器IP的网关MAC地址,而不是服务器MAC地址。
要find连接服务器的端口,最好的select是进入作为服务器网关的设备。 在该设备上,ping服务器并检查ARP表的MAC地址。 然后,检查转发标签以查看用于转发该MAC的stream量的端口。 该端口将是一个下行链路,你将不得不再次检查连接在那里的交换机,或者它将是您正在寻找的端口。