我经常会遇到查询局域网内所有活跃主机的需求,我这里介绍使用Bash脚本来获取局域网内所有主机的方法.
先看代码,
#!/usr/bin/env bash
# Show machine that around me in current local area network
NET=$( ifconfig | grep 'inet addr' | cut -d: -f2 | awk '{print $1}' | grep -v "127.0.0.1" | cut -d. -f1,2,3 )
for ip in $(seq 1 254);
do ping -c 1 $NET.$ip >/dev/null;
if [ $? -eq 0 ];then
echo "$NET.$ip" up
fi
done
简单来说,就是通过ping来检测. 来分析下代码:
NET=$( ifconfig | grep 'inet addr' | cut -d: -f2 | awk '{print $1}' | grep -v "127.0.0.1" | cut -d. -f1,2,3 )
这段用来获取本机地址
seq 1 254
来生成一个大小从1到254的数组,后续根据这个数组元素来组合一段IP进行ping操作
ping -c 1 $NET.$ip >/dev/null;
if [ $? -eq 0 ];then
echo "$NET.$ip" up
fi
对目标主机进行1次(也只有1次)的ping操作,如果ping程序退出状态是0,则能ping通,主机存在.
这段代码小巧,已经在我的MySQLTools开发包里使用到了,挺好用,希望能帮到你们。