Suchen Sie die IP der VM, auf der KVM ausgeführt wird

Suchen Sie die IP der VM, auf der KVM ausgeführt wird

Wie kann ich die IP der VM auf KVM finden (mit Nmap)? Wenn nicht, gibt es in Libvirt Funktionen, die das tun?

Antwort1

Schnelles und einfaches Beispiel für KVM auf Centos 63 x86_64. Kurzer Ping im Hintergrund an alle möglichen IP-Adressen, die die VMs in diesem Segment haben könnten

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

Extrahieren Sie die Namen und MAC-Adressen der VMs über virsh und extrahieren Sie die IP aus der ARP-Tabelle

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

Antwort2

Nachdem ich mir stundenlang die Hände schmutzig gemacht hatte, stieß ich zufällig aufDasEpische Verbindung.

  1. Holen Sie sich die MAC-Adresse der VM aus der Konfigurationsdatei der VM (da ich KVM verwende, habe ich die XML-Datei nach der MAC-Adresse abgefragt).
  2. Verwenden Sie dann arp -a und holen Sie sich alle MAC-Adressen und die Adresse der Schnittstellen und speichern Sie sie in einer Datei
  3. Fragen Sie die Datei nach der MAC-Adresse der VM aus Schritt 1 ab.

Antwort3

Ich habe ein Bash-Skript geschrieben, um dies zu tun, aber auch um nach Maschinen zu filtern, die den Namen „Swarm“ enthalten. Sie können den Filter nach Bedarf entfernen oder ändern. (entfernen | grep "swarm") Sie können dies als vollständiges Skript verwenden oder die Einzeiler daraus kopieren und einfügen:

#!/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;

Die Bestandteile sind Virsh-Befehle, virsh listum eine Liste aller VMs zu erhalten, und dann in einer For-Schleife, domifaddr <VM NAME>um die IP-Adresse zu erhalten. Der Rest besteht darin, den Text herauszufiltern, sodass nur eine IP-Adresse pro Zeile enthalten ist. Ich habe dies auf dem Ubuntu KVM-Server 15.10 geschrieben/ausgeführt.

Antwort4

Mit dem Befehl virt-cat können Sie alle Dateien auf einer VM abfragen. Beispielsweise die DHCP-Lease-Datei:

virt-cat -d Ihre_Domäne /var/lib/dhcp/dhclient.eth0.leases

verwandte Informationen