看我如何使用 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
大家如果有建议,可以评论告诉我,或者私信我,我可以修改脚本,让他变得更好
看我如何使用 shell 来获取所有 KVM 虚拟机的 IP 地址的更多相关文章
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- js获取本机的网络IP地址
JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...
- 如何获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- 如何获取 docker 容器(container)的 ip 地址(转)
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- Java获取请求客户端的真实IP地址
整理网友的材料,最后有源码,亲测能解决所有java获取IP真实地址的问题 整理的这里: 1.链接1 2.链接2 JSP里,获取客户端的IP地址的方法是: request.getRemoteAddr() ...
- HttpServletRequest -- 获取请求主机真实的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
- 014-docker-终端获取 docker 容器(container)的 ip 地址
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- java 获取的是本地的IP地址
1 public static void main(String[] args) { 2 try { 3 InetAddress address = InetAddress.getLocalHost( ...
- Java Web项目获取客户端和服务器的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
随机推荐
- antd的table组件设置Column的width列宽度不生效问题
超长连续字段(长数字和长单词) 破坏表格布局的问题(即使你指定了列的宽度也会被挤开),之前组件内默认加过 word-break: break-word; 去纠正此类布局,又会引起其他的问题. 所以最好 ...
- JAVA之垃圾收集器
概述 垃 圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计 ...
- 【刷题-PAT】A1135 Is It A Red-Black Tree (30 分)
1135 Is It A Red-Black Tree (30 分) There is a kind of balanced binary search tree named red-black tr ...
- gin框架中全局跨域请求处理设置
跨域访问的问题 OPTIONS请求 全局跨域访问中间件 // 跨域访问:cross origin resource share func Cors() gin.HandlerFunc { return ...
- golang中的并发安全和锁
1. 并发安全 package main import ( "fmt" "sync" ) var ( sum int wg sync.WaitGroup ) f ...
- 用8个命令调试Kubernetes集群
如果使用任何系统的时间足够长,那么你肯定必须对其进行调试,Kubernetes也不例外.它是一个分布式系统,有许多运动部件.我们将介绍8个可以运行以调试任何Kubernetes集群的命令. 它将帮助你 ...
- python08day
内容回顾 数据类型的补充 str:pass tuple: (1)----->int count 计数 index 通过元组获取索引 list sort 排序从小到大 sort(reverse=T ...
- Java多线程专题5: JUC, 锁
合集目录 Java多线程专题5: JUC, 锁 什么是可重入锁.公平锁.非公平锁.独占锁.共享锁 可重入锁 ReentrantLock A ReentrantLock is owned by the ...
- ApacheCN Java 译文集 20211012 更新
Effective Java 中文第三版 1. 考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. ...
- 实际工程中加快 Java 代码编写的小提示
这里我简单谈谈 Java 语法在编程效率方面的弱势,以及如何补救. 一.集合的快速创建 C# 是少数拥有集合字面值(又叫初始化表达式)的静态语言之一. var list = new List<i ...