看我如何使用 shell 来获取所有 KVM 虚拟机的 IP 地址

简介: 看我如何使用 shell 来获取所有 KVM 虚拟机的 IP 地址
  • 此脚本的初衷是因为,KVM创建的桥接网卡的虚拟机,无法使用virsh domifaddr命令获取IP,而创建的nat网卡的虚拟机,则可以直接使用virsh domifaddr命令来获取IP
  • 此脚本是个人学习所写的,关于KVM的管理方式,有很多,可以直接使用virt-manager图形化管理配置KVM虚拟机
  • 本着传统手艺不能丢的原则,写下了此脚本,和大佬们互相学习
  • 此脚本最终生成的log文件,也可以当成是资产管理清单
  • 只要路子野,shell也很强

脚本说明

  • 执行脚本之前,需要修改脚本内的IP_HEAD变量,改成自己IP网段,只需要前三个主机位即可,结尾不要有.,否则后面内容执行会报错
  • 脚本使用方法:

    • sh 脚本名称 KVM虚拟机名称(例如:sh virsh-ip.sh centos8.3.3)(虚拟机名称可以使用virsh list命令获取)
    • sh 脚本名称 all(例如:sh virsh-ip.sh all)(获取所有KVM虚拟机的IP)
  • 此脚本获取IP的方式:通过ping整个网段的所有IP,从1ping到255,创建arp缓存表,通过过滤mac地址来获取IP
  • 此脚本开启了并发,可以适当减少ping的范围,减少脚本的运行时间,修改PING_ALL_IPADDR函数内的seq命令参数即可()
  • 此脚本会用到arp命令,需要安装net-tools,否则会获取不到IP,并且会报错
  • 此脚本最终会将内容追加到脚本所在目录的virsh-ip.log文件内,脚本完成后,会有如下回显:Get IP complate,Use command: cat /root/virsh-ip.log,直接复制cat命令和参数,执行后,即可查看到虚拟机对应的IP地址

脚本展示

#!/bin/bash
BASE_DIR=$(cd $(dirname $0); pwd)
VIRSH_NAME=$1
IP_HEAD=192.168.72

if [ "$1"x == "all"x ]
then
    VIRSH_NAME=$(virsh list | egrep -v "^$|Name|-----" | awk '{print $2}')
else
    VIRSH_NAME=$1
fi

function PING_ALL_IPADDR () {
for i in $(seq 1 255)
do
{
    ping ${IP_HEAD}.${i} -c 1 -w 1 > /dev/null  2>&1
} &
done
wait
}

function FIND_VIRSH () {
VIRSH_NAME_ARRAY=($(printf "%q\n" ${VIRSH_NAME}))

for (( n=0 ; n<${#VIRSH_NAME_ARRAY[@]} ; n++ ))
do
VIRSH_MAC=$(virsh domiflist ${VIRSH_NAME_ARRAY[n]} | egrep -v "MAC|-----|^$" | awk '{print $NF}')
    echo "${VIRSH_NAME_ARRAY[n]}:" >> ${BASE_DIR}/virsh-ip.log
    arp -n | grep -i ${VIRSH_MAC} | awk '{print "ip:"$1 "\t" "mac:"$3}' >> ${BASE_DIR}/virsh-ip.log
    echo " " >> ${BASE_DIR}/virsh-ip.log
done

printf "\e[1;35m Get IP complate,Use command: cat ${BASE_DIR}/virsh-ip.log\e[0m\n"
}

function main () {
printf "\e[1;35m I'm just coming!\e[0m\n"
PING_ALL_IPADDR
FIND_VIRSH
}

main

效果展示

执行脚本,获取全部KVM虚拟机的IP
sh virsh-ip.sh all
脚本执行后的回显
 I'm just coming!
执行成功后的回显
 Get IP complate,Use command: cat /root/virsh-ip.log
查看日志内容
cat /root/virsh-ip.log
centos8.3.3-ks:
ip:192.168.72.85        mac:52:54:00:d1:34:fb

centos8.3.1-ks:
ip:192.168.72.87        mac:52:54:00:87:bf:a9

centos8.3.2-ks:
ip:192.168.72.86        mac:52:54:00:f5:3c:c0
大家如果有建议,可以评论告诉我,或者私信我,我可以修改脚本,让他变得更好
目录
相关文章
|
2月前
|
KVM 虚拟化
kvm虚拟机快照
这篇文章主要介绍了KVM虚拟机快照的创建、管理、恢复以及删除的详细步骤,包括查看快照信息、创建快照、模拟系统破坏后基于快照恢复虚拟机、使用快照的注意事项以及如何删除快照。
58 2
|
3月前
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
275 6
|
24天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
2月前
|
KVM 虚拟化
KVM虚拟机的桥接网络
文章主要介绍了KVM虚拟机的NAT和桥接网络类型的工作原理、配置方法以及如何进行网络模式的切换。
44 3
KVM虚拟机的桥接网络
|
2月前
|
KVM 虚拟化
KVM虚拟机的克隆
这篇文章介绍了如何使用KVM虚拟机进行完整克隆和链接克隆,包括手动克隆和使用virt-clone工具克隆的方法,以及如何编写脚本来实现自动化克隆和删除虚拟机。
67 3
KVM虚拟机的克隆
|
2月前
|
KVM 虚拟化
KVM虚拟机的热迁移
这篇文章详细介绍了KVM虚拟机的热迁移过程,包括临时迁移和永久迁移的步骤,以及可能遇到的故障和解决方案。
112 1
KVM虚拟机的热迁移
|
2月前
|
KVM 虚拟化
kvm虚拟机磁盘管理
文章详细介绍了KVM虚拟机磁盘管理,包括磁盘格式概述、创建虚拟机时如何指定磁盘格式、以及磁盘工具的常用命令,旨在帮助用户更好地理解和操作KVM虚拟机的磁盘管理。
82 1
kvm虚拟机磁盘管理
|
2月前
|
KVM 虚拟化 数据安全/隐私保护
KVM虚拟机安装实战
本文讲述了如何创建并使用VNC连接KVM虚拟机的详细教程,包括安装图解和命令行参数说明。
111 8
|
2月前
|
KVM 虚拟化
KVM虚拟机的冷迁移
这篇文章详细描述了KVM虚拟机的冷迁移过程,包括无依赖环境迁移、有链接克隆虚拟机迁移、多块磁盘迁移的案例,以及可能遇到的错误和解决方案。
90 3
|
3月前
|
API 网络架构
【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息
【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息