尋找執行KVM的VM的IP

尋找執行KVM的VM的IP

如何在 KVM 上找到 VM 的 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 中 VM 的 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 your_domain /var/lib/dh​​cp/dhclient.eth0.leases

相關內容