Como ya expliqué en la entrada de hace unos años, Cisco Discovery Protocol (CDP) es un protocolo propietario de Cisco que permite visualizar información de los equipos directamente conectados (Sistema Operativo, IP, modelo de dispositivo…) a nivel de capa 2 (Data Link).
En el caso de VMware y ESX/ESXi, el método más efectivo para consultar esta información es con las herramientas que nos ofrece el propio sistema. Digo esto porque haciendo tcpdump es probable que no veáis este tráfico debido a la arquitectura de virtual switches y demás.
Lo primero es identificar la tarjeta de red de la cual queremos recopilar la información CDP. También podemos ver toda la información a nivel global con el comando que pongo al final de la entrada. En la guía de comandos útiles de ESXi especifiqué la forma de sacar las interfaces de red:
~ # esxcfg-nics -l Name PCI Driver Link Speed Duplex MAC Address MTU Description vmnic0 0000:04:00.00 igb Up 100Mbps Full 00:xx:xx:xx:xx:xx 1500 Intel Corporation ... vmnic1 0000:04:00.01 igb Up 100Mbps Full 00:xx:xx:xx:xx:xx 1500 Intel Corporation ...
Una vez identificada, podemos consultar todos los datos CDP con el siguiente comando por cada una de las interfaces:
~ # vim-cmd hostsvc/net/query_networkhint --pnic-name=vmnic0
Y la información que obtenemos:
(vim.host.PhysicalNic.NetworkHint) [ (vim.host.PhysicalNic.NetworkHint) { dynamicType = , device = "vmnic0", subnet = (vim.host.PhysicalNic.NetworkHint.IpNetwork) [ (vim.host.PhysicalNic.NetworkHint.IpNetwork) { dynamicType = , vlanId = 0, ipSubnet = "XXXXXXX-XXXXXXX", } ], connectedSwitchPort = (vim.host.PhysicalNic.CdpInfo) { dynamicType = , cdpVersion = 2, timeout = 0, ttl = 56, samples = 685364, devId = "XXXXXXX(XXXXXXX)", address = "XXXXXXX", portId = "X/XX", deviceCapability = (vim.host.PhysicalNic.CdpDeviceCapability) { dynamicType = , router = false, transparentBridge = true, sourceRouteBridge = false, networkSwitch = true, host = false, igmpEnabled = true, repeater = false, }, softwareVersion = "unknown", hardwarePlatform = "XXXXXXX", ipPrefix = "0.0.0.0", ipPrefixLen = 0, vlan = XXX, fullDuplex = true, mtu = 0, systemName = "XXXXXXX", systemOID = "XXXXXXX", mgmtAddr = "XXXXXXX", location = "XXXXXXX", }, lldpInfo = (vim.host.PhysicalNic.LldpInfo) null, } ]
También podemos obtener la información de todas las interfaces con un único comando:
~ # vim-cmd hostsvc/net/query_networkhint