大致思路就是这样:
kvm宿主机上的虚拟机可以通过virsh list来查看,不过IP就没办法查看了,这里我们通过arp协议来将一个网段内可以ping通的ip添加到宿主机的arp缓存中,通过查询虚拟机的mac地址来和ip做匹配,这样就可以查到当前宿主机上正在运行的虚拟机和它们的IP了。
脚本实例:
#!/bin/bash
#ping当前网段内在线的主机,以便产生arp记录.
for ip in 10.2.2.{1..253};do
{
ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp记录.
running_vms=`virsh list |grep running`
echo -ne "共有`echo "$running_vms"|wc -l`个虚拟机在运行.\n"
for i in `echo "$running_vms" | awk '{ print $2 }'`;do
mac=`virsh dumpxml $i |grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`
ip=`arp -ne |grep "$mac" |awk '{printf $1}'`
printf "%-30s %-30s\n" $i $ip
done