• 此脚本的初衷是因为,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

大家如果有建议,可以评论告诉我,或者私信我,我可以修改脚本,让他变得更好

最新文章

  1. BW顾问必需要清楚的:时间相关数据建模场景需求分析
  2. #HTML:無序、有序與定義清單
  3. 关于使用UDP(TCP)跨局域网,NAT穿透的心得
  4. duplicate database的时候,rman连接 auxiliary database的后状态不正确
  5. 封装jquery时用到的东西
  6. String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。
  7. 使用struts+spring+hibernate组装web应用
  8. retain two decimal digits.
  9. FZU 2099 魔法阵
  10. Hadoop中MapReduce作业流程图
  11. 【SignalR学习系列】2. 第一个SignalR程序
  12. imageview无法显示图片:java.lang.RuntimeException: Canvas: trying to draw too large(281520000bytes) bitmap
  13. JDBC(Java Data Base Connectivity,java数据库连接)
  14. 不可解问题之停机问题(Undecidable Problem Halting Problem)
  15. 利用Windows7自带的截图工具获取菜单截图的步骤
  16. CSS中width和height与盒子模型的关系
  17. Anagrams by Stack(深度优先搜索)
  18. IndexedDB(二:索引)
  19. poj 1298 The Hardest Problem Ever
  20. [S5PV210 Linux字符驱动之PWM蜂鸣器驱动

热门文章

  1. C语言 生成一个随机数
  2. 第10组-Alpha冲刺 总结
  3. 从内存管理原理,窥探OS内存管理机制
  4. JAVA SOCKET 详解
  5. kafka学习笔记(五)kafka的请求处理模块
  6. Ubuntu 桌面版使用总结
  7. django框架--登录注册功能(ajax)
  8. 云计算实验二 Docker实验-docker安装
  9. APC 篇—— APC 挂入
  10. shiro 快速入门详解。