检查网络上是否存在 MAC 地址的工作不可靠

检查网络上是否存在 MAC 地址的工作不可靠

我有一组 mac 地址,当它们都不在网络上时,我想做点什么。这是我最初的计划:

mac_addresses=('1' '2' '3')
arp_output=$(arp)
for level in "${mac_addresses[@]}"
do
   echo "$arp_output" | grep -iq "$level" || mac_count=$((mac_count+1))
done

if [[ "$mac_count" = "${#mac_addresses[@]}" ]]
then
   do something
fi

我使用手机的 mac 地址进行测试。因此数组中只有一个元素:我的手机的。

我注意到脚本运行不稳定。当我的手机连接到网络时,脚本什么都不做。很好。当我断开手机与网络的连接(即关闭 wifi)时,它仍然什么都不做,尽管此时它应该这样做了(因为我的手机不再连接到网络,而且这是阵列中唯一的手机,所以此时它应该做点什么)。

所以我尝试了另一种方法:使用sudo nmap -sn 192.168.2.*。但是,这也不起作用。

当我的手机在网络上时,它什么也不做。我断开手机连接,它又做了一些事情。我重新连接手机,它仍然会做一些事情,即使我的手机再次出现在网络上。这不是几秒钟的事。我的手机现在又在网络上 20 分钟了,它仍然会做一些事情。

有办法解决这个问题吗?是因为一些缓存吗?

编辑:[回复明斯基]

请参阅以下内容:

# "1" will be the mac-address of my phone
arp | grep -i "1" #phone connected to wifi
192.168.2.16             ether   1   C                     enp3s0

#PHONE IS NOW DISCONNECTED

arp | grep -i "1" #phone not connected to wifi
192.168.2.16             ether   1   C                     enp3s0
arp | grep -i "1" #phone not connected to wifi
192.168.2.16             ether   1   C                     enp3s0
arp | grep -i "1" #phone not connected to wifi
192.168.2.16             ether   1   C                     enp3s0

ping -b 192.168.2.255
Big output; 192.168.2.16 not visible in output

arp | grep -i "1" #phone not connected to wifi
192.168.2.16             ether   1   C                     enp3s0

#PHONE IS NOW RE-CONNECTED

arp | grep -i "1" #phone connected to wifi
192.168.2.16             ether   1   C                     enp3s0

sudo nmap -sn 192.168.2.* | grep "1"
#NO RESPONSE; EXIT CODE 1

相关内容