需求分析:
-
得到局域网中正在使用的ip和未使用的ip
-
将使用的和未使用的ip地址保存到两个不同的文件
-
得到这些ip地址对应的mac地址
此处使用的校园网作案例
#!/bin/bash
# 清空文件,不删除文件内容
>used_ip.txt
>unused_ip.txt
# 此处使用的是校园网的WAN口ip
# 使用for循环遍历整个局域网里的ip
for i in {1..254}
do
# 使用多个子进程执行ping命令,提升执行的效果
(ping 10.122.199.$i -c 1 -w 1 &>/dev/null
if (( $? == 0 ))
then
echo "10.122.199.$i is used"
echo "10.122.199.$i" >>used_ip.txt
else
echo "10.122.199.$i" >>unused_ip.txt
echo "10.122.199.$i is unused"
fi) &
done
# 让父进程等待子进程,所有的子进程执行完成了,再退出父进程
wait
# 父进程如果退出,会给所有子进程发送hup挂起信号,收到hup信号的进程会被内核kill掉,为了防止子进程还没执行完成就被kill掉,需要wait
# 输出使用的ip地址和总数
echo "##############used ip detail################"
n=$(cat used_ip.txt|wc -l)
echo "有${n}个ip地址在这个局域网里被使用,如下:"
cat used_ip.txt
echo "#################arp 缓存表###########################"
# 得到arp缓存表里的有效的ip对应的mac地址
arp -a|awk '{print $2,$4}'|grep -v "incomplete"|tr -d '()'