Как узнать 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
После долгих часов работы я случайно наткнулся наэтотЭпическая ссылка.
- Получите MAC-адрес виртуальной машины из файла конфигурации виртуальной машины (поскольку я использую KVM, я запросил MAC-адрес в XML-файле).
- Затем используйте arp -a и получите все MAC-адреса и адреса интерфейсов и сохраните их в файле.
- Запросите файл на предмет 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