У меня есть массив mac-адресов, и когда их всех нет в сети, хочется что-то сделать. Это был мой первоначальный план:
mac_addresses=('1' '2' '3')
arp_output=$(арп)
для уровня в "${mac_addresses[@]}"
делать
эхо "$arp_output" | grep -iq "$ уровень" || mac_count=$((mac_count+1))
сделано
если [[ "$mac_count" = "${#mac_addresses[@]}" ]]
тогда
сделай что-нибудь
фи
Я использовал mac-адрес своего телефона, чтобы проверить его. Так что только один элемент в массиве: мой телефон.
Я заметил, что скрипт работает ненадежно. Когда мой телефон был подключен к сети, скрипт ничего не делал. Хороший. Когда я отключаю свой телефон от сети (то есть выключаю Wi-Fi), он по-прежнему ничего не делает, хотя к этому моменту должен был бы (потому что мой телефон больше не присутствует в сети, и это единственный в массиве, поэтому он должен делать что-то к этому моменту).
Поэтому я попробовал другой способ: используя судо нмап -сн 192.168.2.*
. Однако это тоже не работает.
Когда мой телефон присутствует, он ничего не делает. Я отключаю телефон, и он что-то делает. Я снова подключаю свой телефон, и он все еще что-то делает, хотя мой телефон снова присутствует в сети. И дело не в секундах. Мой телефон снова был в сети уже 20 минут, и он все еще что-то делает.
Есть ли способ исправить это? Это из-за какого-то кэширования?
РЕДАКТИРОВАТЬ: [Ответ Мински]
См. следующее:
# "1" будет mac-адресом моего телефона
арп | grep -i "1" #телефон подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
#ТЕЛЕФОН ОТКЛЮЧЕН
арп | grep -i "1" #телефон не подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
арп | grep -i "1" #телефон не подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
арп | grep -i "1" #телефон не подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
пинг -б 192.168.2.255
Большой выход; 192.168.2.16 не отображается в выводе
арп | grep -i "1" #телефон не подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
#ТЕЛЕФОН ПОВТОРНО ПОДКЛЮЧЕН
арп | grep -i "1" #телефон подключен к Wi-Fi
192.168.2.16 эфир 1 C enp3s0
sudo nmap -sn 192.168.2.* | группа "1"
#НЕТ ОТВЕТА; КОД ВЫХОДА 1