Найти IP-адрес виртуальной машины, на которой запущен KVM

Найти IP-адрес виртуальной машины, на которой запущен KVM

Как узнать IP виртуальной машины на KVM (используя Nmap)? Если нет, то есть ли какие-либо функции в Libvirt для этого?

решение1

Быстрый и грязный пример для KVM на Centos 63 x86_64. Короткий пинг в фоновом режиме на все возможные IP-адреса, которые могут иметь виртуальные машины в этом сегменте

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

Извлечь имена и MAC-адреса виртуальных машин с помощью virsh и извлечь IP-адрес из таблицы 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

решение2

После долгих часов работы я случайно наткнулся наэтотЭпическая ссылка.

  1. Получите MAC-адрес виртуальной машины из файла конфигурации виртуальной машины (поскольку я использую KVM, я запросил MAC-адрес в XML-файле).
  2. Затем используйте arp -a и получите все MAC-адреса и адреса интерфейсов и сохраните их в файле.
  3. Запросите файл на предмет MAC-адреса виртуальной машины из шага 1.

решение3

Я написал скрипт bash, чтобы сделать это, но также отфильтровать машины с именем "swarm". Вы можете удалить фильтр или изменить его по мере необходимости. (удалить | grep "swarm") Вы можете использовать это как полный скрипт или скопировать и вставить одну строку из него:

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

Составные части — это команды virsh, virsh listчтобы получить список всех виртуальных машин, а затем в цикле for вызов, domifaddr <VM NAME>чтобы получить ее ip addr. Все остальное — это отфильтровать текст, оставив только один IP-адрес на строку. Я написал/запустил это на сервере Ubuntu KVM 15.10

решение4

Используя команду virt-cat, вы можете запросить все файлы на виртуальной машине. Например, файл аренды dhcp:

virt-cat -d ваш_домен /var/lib/dhcp/dhclient.eth0.leases

Связанный контент