Nmap을 사용하여 KVM에서 VM의 IP를 어떻게 찾을 수 있나요? 그렇지 않은 경우 Libvirt에 이를 수행하는 기능이 있습니까?
답변1
Centos 63 x86_64의 KVM에 대한 빠르고 더러운 예입니다. VM이 이 세그먼트에 있을 수 있는 모든 가능한 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
virsh를 통해 VM의 이름과 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
오랜 시간 손을 더럽힌 끝에 우연히 발견한이것에픽 링크.
- VM의 구성 파일에서 VM의 MAC 주소를 가져옵니다(KVM을 사용하고 있으므로 .xml 파일에서 MAC 주소를 쿼리했습니다).
- 그런 다음 arp -a를 사용하여 모든 MAC 주소와 인터페이스의 주소를 가져와 파일에 저장합니다.
- 1단계에서 VM의 MAC 주소에 대한 파일을 쿼리합니다.
답변3
나는 이 작업을 수행하고 이름이 "swarm"인 시스템을 필터링하기 위해 bash 스크립트를 작성했습니다. 필요에 따라 필터를 제거하거나 변경할 수 있습니다. (제거 | 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 명령을 사용하면 VM의 모든 파일을 쿼리할 수 있습니다. 예를 들어 dhcp 임대 파일은 다음과 같습니다.
virt-cat -d your_domain /var/lib/dhcp/dhclient.eth0.leases