Comment puis-je trouver l'IP de la VM sur KVM (en utilisant Nmap) ? Sinon, existe-t-il des fonctions dans Libvirt pour le faire ?
Réponses
Trop de publicités?Exemple rapide et sale pour KVM sur Centos 63 x86_64. Ping court en arrière-plan vers toutes les adresses IP possibles que les VMs peuvent avoir dans ce segment.
for i in {1..249}
do
ping -c 1 -n -q -r -t 1 -s 1 -W 1 192.168.100.$i > /dev/null &
done
Extraire les noms et les adresses MAC des VMs via virsh et extraire l'IP de la table ARP.
for name in `virsh list | grep running | awk '{ print $2 }'`
do
printf "\n$name\n "
arp -e | grep "`virsh dumpxml $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" |
awk '{ printf $1 ; printf " " ; printf $3 }'
done
Après de longues heures à me salir les mains, je suis tombé par hasard sur este Lien épique.
- Obtenir l'adresse MAC de la VM à partir du fichier de configuration de la VM (puisque j'utilise KVM, j'ai interrogé le fichier .xml pour l'adresse MAC).
- Ensuite, utilisez arp -a et récupérez toutes les adresses MAC et l'adresse des interfaces et stockez-les dans un fichier.
- Recherchez dans le fichier l'adresse MAC de la VM de l'étape 1.
J'ai écrit un bash script pour faire cela mais aussi pour filtrer les machines ayant le nom "swarm" dans leur nom. Vous pouvez supprimer le filtre ou le modifier selon vos besoins. (supprimer | grep "swarm"
) Vous pouvez l'utiliser comme le script complet ou copier-coller le one liner de celui-ci :
#!/usr/bin/env bash
# we make assumption that the VM's we want have the word swarm in their name. Edit for different name or to get all unfiltered names
for i in $(virsh list | grep "swarm" | awk '{print $2;}' ); do virsh domifaddr $i | sed 3q | sed '$!d' |awk '{print $4}' ; done;
Les éléments constitutifs sont les commandes virsh, virsh list
pour obtenir une liste de toutes les VM, puis dans un boucle for appeler domifaddr <VM NAME>
pour obtenir l'adresse IP de celui-ci. Tout le reste consiste à filtrer le texte pour ne retenir que l'adresse IP, une par ligne. J'ai écrit/exécuté ceci sur un serveur KVM Ubuntu 15.10.
Lorsque l'on commence avec qemu-kvm
et le --nographic
vous pouvez utiliser l'option ctrl-a
c
pour obtenir le moniteur qemu (une sorte de Shell pour surveiller et contrôler les VMs).
La commande info network
donnera des informations sur la connexion réseau, y compris l'adresse MAC. La commande info usernet
montre des informations sur les ponts : par exemple, comment un port invité est mappé sur un port hôte. Cette information inclut souvent l'IP de l'invité.
Exemple
Démarrer le vm avec une redirection de port tcp :
qemu-kvm -cpu host -m 1024 -hda ~/myvm.qcow -net user,hostfwd=tcp::10022-:22 -net nic -nographic
après ctrl-a
c
les commandes info network
y info usernet
donner
(qemu) info network
hub 0
\ hub0port1: e1000.0: index=0,type=nic,model=e1000,macaddr=58:44:00:22:11:
\ hub0port0: user.0: index=0,type=user,net=10.0.2.0,restrict=off
(qemu) info usernet
VLAN 0 (user.0):
Protocol[State] FD Source Address Port Dest. Address Port RecvQ S
TCP[HOST_FORWARD] 13 * 10022 10.0.2.15 22 0
Référence : QEMU-doc à wiki.qemu.org.
- Réponses précédentes
- Plus de réponses