Identifier le port réseau sur lequel est connecté un ESX

Bonjour,

Si, comme moi, vous ne savez pas « vraiment » sur quel switch, ni quel port se trouve connecté la vmnic de votre ESX ET que votre switch ne supporte pas CDP, mais LLDP, voici un script maison qui va vous donner l’info.

Mon script lance une capture d’une trame spécifique émise par le switch sur chaque porte afin de faire un inventaire.
L’info est sauvée dans un datastore connu de tous les ESXs (plus facile pour récupérer l’info)

Prérequis :

  • un accès ROOT sur chaque ESX
  • Une connexion via SSH possible sur la console
  • Un datastore commun à tous les ESXs

La création du tableau de correspondance ESX <> mot de passe ROOT

$ESXs =@{'ESX01' ='abc123'}
$ESXs+=@{'ESX02' ='def456'}

Le script :

get-datacenter "MON DataCenter" | get-vmhost | foreach {
$esx=$_.name
$password=$ESXs.Get_Item($_.name)
$_ | Get-VirtualSwitch | select -expandproperty nic| foreach {
$vmnic=$_

$file= »C:\temp\$esx-$vmnic.sh »
‘ps | grep « pkt » | awk  »{ print $1 } » | kill’ | out-file $file -Encoding ascii
« pktcap-uw –uplink $vmnic –ethtype 0x88cc -c 1 -o /tmp/$vmnic  » | out-file $file -append -Encoding ascii
‘FEX=`hexdump -e « 500 \ »%_p\ » \ »\\n\ » » /tmp/’+$vmnic+’ | cut -b 67-77`’ | out-file $file -append -Encoding ascii
‘echo `hostname`,’+$vmnic+’,$FEX >> /vmfs/volumes/MonDatastore/vmnicInventory.csv’ | out-file $file -append -Encoding ascii
« putty.exe $esx -l root -pw $password -m C:\temp\$esx-$vmnic.sh »
putty.exe $esx -l root -pw $password -m C:\temp\$esx-$vmnic.sh | out-null
}
}

Si tout se passe bien, vous vous retrouvez avec un super fichier texte avec toutes les infos.

NB : J’affiche dans la console la ligne de commande que j’execute, car il m’est déjà arrivé de voir « putty » planter en pleine collecte. Plutôt que de tout relancer, je ne lance que la commande qui a planté.
NB2 : Je ne lance pas toutes les collectes en même temps, car il peux arriver que 2 commandes veuillent écrire en même temps et alors, ca plante. C’est plus lent, mais plus sur.

6 comments

Hosting

En fait, c’est le port choisi aleatoirement par le navigateur du client pour recevoir les reponses du serveur. Le client envoie ses requetes sur le port 80 du serveur, et celui-ci lui repond sur le port aleatoire qu’il a choisi en initialisant la connexion.

    SnakeNET

    Je crois que tu fais fausse route.
    Les switchs (Cisco, alcatel, dlink, netgear,…) « informent » régulièrement les composants qui sont connectés en leur envoyant une trame réseau spécifique qui indique le nom du switch, son ip de management et surtout, le port physique sur lequel on est connecté.
    Le protocole utilisé peut etre CDP (Cisco Discovery Protocol) propriétaire de CISCO ou LLDP (open).
    Le script ci-dessus fait une capture de la trame LLDP spécifiquement envoyée par l’équipement réseau.
    Une fois celle ci capturée, elle est décomposée pour ne reprendre que les champs qui nous intéresse…
    Dans le script ci-dessus, c’est adapté à un CISCO NEXUS 7000.
    Pour un Alcatel, c’est un autre format :

    'FEX=`hexdump -e "500 \"%_p\" \"\\n\"" /tmp/'+$vmnic+' | cut -b 77-150`'

    Et donc, comme l’info provient directement du switch, elle est assez digne de confiance.
    Pourquoi ce bémol ? parce que si un c**** a branché un hub ou un switch passif entre le switch et l’ESX, on ne le voit pas… ou pire, si 2 switch sont reliés entre eux par un hub/switch passif : on reçoit l’info d’un switch, puis de l’autre… ca dépend dans quel ordre on les reçoit. (sans compter qu’on vient de faire une boucle dans le réseau)

      nothing N

      The command to kill process is wrong. Should be :

      for each in `ps | grep « pktcap-uw » | awk ‘{ print $1 }’ `
      do
      kill $each
      done

VHN

Bonjour,

Merci pour pour ce billet très intéressant. Je cherche également à identifier sur quel port de mon switch sont connectés les vmnic.
Je ne comprends pas très bien où commence votre script, et d’où l’on doit exécuter car je d’après cette commande: « putty.exe $esx -l root -pw $password -m C:\temp\$esx-$vmnic.sh | out-null », le script se lance depuis windows?
PS: Je n’ai qu’un seul ESXi.

Merci d’avance pour votre réponse.

    SnakeNET

    L’idée est de lancer des commandes sur chaque ESX pour aller capturer les infos.
    Pour ce faire, on génère un fichier avec les commandes à faire executer par Putty.
    Evidemment, si le poste utilisateur est sous Linux, ca fonctionne pas 🙂

Mellanox Guy

Pour Mellanox :

pktcap-uw --uplink vmnic4 --ethtype 0x88cc -c 1 -o /tmp/vmnic4
hexdump -e "500 \"%_p \" \" \\n\" " /tmp/vmnic4

Laisser un commentaire