查找运行 KVM 的虚拟机的 IP

查找运行 KVM 的虚拟机的 IP

如何在 KVM 上找到虚拟机的 IP(使用 Nmap)?如果没有,Libvirt 中是否有任何函数可以执行此操作?

答案1

Centos 63 x86_64 上 KVM 的快速示例。在后台对虚拟机可能在此网段中拥有的所有可能的 IP 地址进行短暂 ping

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

通过 virsh 提取虚拟机的名称和 MAC 地址,并从 ARP 表中提取 IP

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. 从 VM 的配置文件中获取 VM 的 MAC 地址(因为我使用的是 KVM,所以我查询了 .xml 文件中的 MAC 地址)。
  2. 然后使用 arp -a 并获取所有 MAC 地址和接口地址并将其存储在文件中
  3. 查询文件以获取步骤 1 中的虚拟机的 MAC 地址。

答案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用于获取所有 VM 的列表,然后在 for 循环调用中domifaddr <VM NAME>获取其 IP 地址。其余部分是将文本过滤为每行仅一个 IP 地址。我在 Ubuntu KVM 服务器 15.10 中编写/运行了此程序

答案4

使用 virt-cat 命令可以查询虚拟机上的所有文件。例如,dhcp 租约文件:

virt-cat -d 你的域名 /var/lib/dh​​cp/dhclient.eth0.leases

相关内容