Наблюдая за Wireshark, я заметил, что когда iPhone подключается к сети Wi-Fi, он отправляет несколько пакетов IGMP / MDNS на 224.0.0.251 (я думаю, широковещательная передача по локальной сети). Есть ли простой способ отслеживать эти пакеты, а затем либо запустить сценарий, либо отправить событие?
Или это лучший способ просто запустить сниффер пакетов? Любые простые, которые могут отправлять события или выполнять команды curl при срабатывании фильтра?
Когда я запускаю nc -u -l 5353, я получаю:
My-Name-iPhonelocal???
x???)??
??cc^C
Могу я сделать что-нибудь вроде: nc -u -l 5353 | grep iPhonelocal | выполнить команду ...
Это поведение не относится исключительно к iPhone. Согласно RFC 3171, IP 224.0.0.251 используется для Multicast DNS. Функция Multicast DNS технологии Bonjour позволяет устройствам в локальной сети подключаться друг к другу по имени без отдельного DNS-сервера.
Если вы хотите обнаружить определенные устройства в своей сети, вам следует использовать nmap и удаленное определение ОС (OS-Fingerprinting), но это не на 100% точно.
Хе-хе, хорошо, я укушу. Подумайте о том, чтобы сделать что-то вроде этого (я неясен, так как вам придется адаптировать это к имеющимся у вас инструментам):
Безусловно, это кажется более простым подходом, чем попытка взаимодействия со сниффером в реальном времени (однако, возможно, snort можно настроить для выполнения чего-то подобного).
Я, конечно, предполагаю, что iPhone будет пытаться продлевать аренду при каждом подключении.
Удачи!
Из вашего комментария:
Я в основном пытаюсь запустить сценарий, как только мой iPhone окажется в зоне действия моей домашней сети, чтобы включить свет. Любые идеи? Кто-то еще предложил использовать sed.
Звучит как забавный проект!
Вы можете сделать это, опрашивая каждые 1-2 секунды с помощью команды ping. Это немного неудобно, но эхо-запросы вызовут незначительные накладные расходы.
Настройте свой DHCP-сервер так, чтобы он всегда выдавал один и тот же IP-адрес вашему iPhone (на основе его MAC-адреса).
Запустите сценарий на вашем компьютере с Linux, который пытается пинговать этот IP-адрес каждые n секунд.
Включите / выключите свет на основе простых критериев отклика на пинг
Если бы у вас было приложение для мониторинга, такое как Zabbix, вы могли бы сделать это очень легко. Вы должны настроить тест ping для своего iPhone и создать триггер, который запускает внешний скрипт (для включения / выключения света). Zabbix - это перебор, если это все вы его используете, но я уверен, что вы можете придумать и другие варианты использования. :)
Кроме того, в логике сценария / триггера вы должны попытаться избежать мерцания. Свет должен включиться, как только будет получен 1 пинг. Он должен отключаться только после того, как на эхо-запросы не отвечают в течение полных 5 минут. Таким образом, ваши огни не будут мигать, когда у вас есть перегрузка сети.
Некоторое время назад я заметил, что мой брандмауэр продолжает отбрасывать такие пакеты и записывать их в kern.log. Ваш пост вдохновил меня на создание небольшого скрипта, который уведомляет меня, когда определенный iPhone подключается к моему Wi-Fi.
#!/bin/bash
if [ "$1" != "ehlo" ]; then
# If the script is ran, restart with the correct stdin
tail -Fn 0 /var/log/kern.log | $(readlink -f $0) "ehlo"
exit 0
fi
lasttime=0
while [ true ]; do
read derp
if [ $(echo "$derp" | fgrep -c "0m:ac:ad:dr:es:s0") -gt 0 ];then
if [ $(($(date +%s)-$lasttime)) -ge 30 ];then
lasttime=$(date +%s)
# Pop up an ubuntu notification (requires libnotify-bin)
notify-send "kern.log" "iPhone has appeared"
fi
fi
done
http://www.zeroflux.org/projects/knock
Возможно, вам удастся каким-то образом настроить knockd для ответа на широковещательный трафик.
Я использую блокировку портов для защиты SSH на некоторых серверах. Я уверен, что то, что вы пытаетесь сделать, не рассматривается ни в одном из примеров, но это возможно.