Am o serie de adrese Mac, iar când nu sunt toate prezente în rețea, vreau să fac ceva. Acesta a fost planul meu inițial:
mac_addresses=('1' '2' '3')
arp_output=$(arp)
pentru nivelul în „${mac_addresses[@]}”
do
echo „$arp_output” | grep -iq „$nivel” || mac_count=$((mac_count+1))
Terminat
dacă [[ "$mac_count" = "${#mac_addresses[@]}" ]]
atunci
Fă ceva
fi
Folosisem adresa mac a telefonului meu pentru a-l testa. Deci un singur element din matrice: telefonul meu.
Am observat că scenariul funcționa nesigur. Când telefonul meu a fost conectat la rețea, scriptul nu a făcut nimic. Bun. Când îmi deconectez telefonul de la rețea (denumit închidere wifi), tot nu face nimic, deși ar trebui până acum (deoarece telefonul meu nu mai este prezent în rețea și acesta este singurul din matrice, așa că ar trebui să facă ceva până în acest moment).
Așa că am încercat un alt mod: folosind sudo nmap -sn 192.168.2.*
. Cu toate acestea, nici acest lucru nu funcționează.
Când telefonul meu este prezent, nu face nimic. Îmi deconectez telefonul și face ceva. Îmi reconectam telefonul și încă face ceva, deși telefonul meu este prezent din nou în rețea. Și nu este vorba despre secunde. Telefonul meu a fost din nou în rețea de 20 de minute și încă face ceva.
Există vreo modalitate de a remedia asta? Este din cauza unor memorii cache?
EDIT: [Răspuns la Minsky]
Vedeți următoarele:
# „1” va fi adresa mac a telefonului meu
arp | grep -i "1" #telefon conectat la wifi
192.168.2.16 eter 1 C enp3s0
#TELEFONUL ESTE ACUM DECONECTAT
arp | grep -i "1" #telefonul nu este conectat la wifi
192.168.2.16 eter 1 C enp3s0
arp | grep -i "1" #telefonul nu este conectat la wifi
192.168.2.16 eter 1 C enp3s0
arp | grep -i "1" #telefon nu este conectat la wifi
192.168.2.16 eter 1 C enp3s0
ping -b 192.168.2.255
Producție mare; 192.168.2.16 nu este vizibil în ieșire
arp | grep -i "1" #telefon nu este conectat la wifi
192.168.2.16 eter 1 C enp3s0
#TELEFONUL ESTE ACUM RE-CONECTAT
arp | grep -i "1" #telefon conectat la wifi
192.168.2.16 eter 1 C enp3s0
sudo nmap -sn 192.168.2.* | grep "1"
#NICIUN RASPUNS; COD DE IESIRE 1