Это своего рода продолжение этого моего сообщения.
У меня есть mac-адрес моего телефона (samsung galaxy S9; это не имеет значения). Хочу проверить, в сети он или нет. У него нет статического ip, поэтому мне нужно проверить его, используя его mac-адрес.
Я буду ссылаться на MAC-адрес своего телефона с помощью [1]
.
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-адрес на выходе. Так что пинг работает и "актуален".
Итак, я предполагаю, что arp не является «актуальным», как ping (но это всего лишь мое предварительное предположение). Я думаю, что arp не обновляет свою таблицу, хотя ping «сделал» новую. Но это то, что я думаю, основываясь на комментарии к предыдущему сообщению: « Вы уже выполняете широковещательный пинг, ping -b 192.168.2.255. Это должно пополнить таблицу arp для любых онлайн-устройств с IP-адресом 192.168.2. . . * "
Помогите!
Если вы используете таблицу ARP , чтобы определить, подключен ли ваш телефон к сети или нет, вам необходимо удалить запись ARP вашего телефона из ARP вашего телефона. Таблица. В противном случае вы не сможете определить изменение, потому что предыдущая запись остается прежней.
Вы можете удалить конкретную запись ARP с помощью команды arp -d
и удалить все записи с помощью sudo ip neigh flush all
.
Но я думаю, вам следует использовать nmap для сканирования, к тому же вам больше не нужно будет очищать таблицу ARP . Вы можете использовать этот скрипт.
#!/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 = "
.
Примечание. Для использования этого сценария вам потребуются права суперпользователя.