Это своего рода продолжениеэтотмой пост.
У меня есть mac-адрес моего телефона (Samsung Galaxy S9; хотя это не должно иметь значения). Я хочу проверить, подключен ли он к сети или нет. У него нет статического IP, поэтому мне нужно проверить его, используя mac-адрес.
Я буду ссылаться на mac-адрес моего телефона с помощью [1]
.
- На моем телефоне отключен случайный mac-адрес для сети (в предыдущем посте этого не было). Раньше он генерировал случайный mac-адрес каждый раз, когда подключался к моей сети, теперь этого не происходит.
- Вот что я делаю, чтобы проверить, есть ли mac-адрес в сети:
ping -b 192.168.2.255 -c 20 arp | grep -i "[1]"
Вот «журнал» событий:
#phone connected to network
ping -b 192.168.2.255 -c 20 &> /dev/null
arp | grep -i "[1]"
-> successful
#phone NOT connected to network (turned of wifi on phone)
ping -b 192.168.2.255 -c 20 &> /dev/null
arp | grep -i "[1]"
-> successful
Во второй раз это не должно быть успешным. Телефон не подключен к сети, но он все еще показывает это в выводе arp.
У моего телефона нет статического IP-адреса, но при подключении к сети он почти всегда получает один и тот же IP-адрес. Это нормально. Вывод ping -b
всегда был правильным. Когда мой телефон подключен к сети, я вижу IP-адрес, который он почти всегда получает в списке (команды ping
). Когда мой телефон не подключен, я никогда не вижу его "стандартный" IP-адрес в выводе. Так что ping работает и "актуален".
Поэтому я предполагаю, что arp не "актуален", как ping (но это только мое грубое предположение). Я думаю, что arp не обновляет свою таблицу, даже несмотря на то, что ping "создал" новую. Но это то, что я думаю, основываясь на комментарии к предыдущему посту: "Вы уже делаете широковещательный пинг, ping -b 192.168.2.255. Это должно перезаполнить таблицу arp для всех онлайн-устройств с IP-адресом 192.168.2..*"
Помощь!
решение1
Если вы используетеАРПтаблица Чтобы определить, подключен ли ваш телефон к сети или нет, вам нужно удалить ваш телефонАРПзапись с вашего компьютераАРПтаблица. В противном случае вы не сможете определить изменение, так как предыдущая запись останется неподвижной.
Вы можете удалить определенныеАРПзапись с помощью arp -d <IP_ADDR>
команды и удалить все записи с помощью sudo ip neigh flush all
.
Но я думаю, вам следует использоватьнмапдля сканирования, кроме того, вам не нужно будет чиститьАРПtable больше нет. Вы можете использовать этот скрипт.
#!/bin/bash
mac="$1"
# Scanning network, and obtaining IP address of specfied MAC address, if exists.
PHONEIP=$(sudo nmap -sP -n 192.168.2.0/24 | grep -B2 "$mac" | grep -Eoi "192\.168\.2\.[0-9]+")
if [[ $PHONEIP == "" ]];then
echo "$MAC not found."
else
echo "$MAC found at $PHONEIP"
fi
Но вам придется указать MAC-адрес вашего телефона в качестве первого аргумента или изменить строку mac="$1"
на mac="<your-phone-mac>"
.
Примечание: для использования этого скрипта вам понадобятся права суперпользователя.