Назад | Перейти на главную страницу

Как определить iPhone, подключенный к сети?

Наблюдая за 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% точно.

Хе-хе, хорошо, я укушу. Подумайте о том, чтобы сделать что-то вроде этого (я неясен, так как вам придется адаптировать это к имеющимся у вас инструментам):

  1. получить MAC-адрес вашего iPhone
  2. запустите демон dhcpd на вашем * nix-боксе
  3. убедитесь, что указанный сервер ведет журнал
  4. напишите сценарий [shell / perl / ruby ​​/ python] для отслеживания этого файла журнала и принятия мер при нахождении строки, соответствующей этому MAC-адресу.

Безусловно, это кажется более простым подходом, чем попытка взаимодействия со сниффером в реальном времени (однако, возможно, snort можно настроить для выполнения чего-то подобного).

Я, конечно, предполагаю, что iPhone будет пытаться продлевать аренду при каждом подключении.

Удачи!

Из вашего комментария:

Я в основном пытаюсь запустить сценарий, как только мой iPhone окажется в зоне действия моей домашней сети, чтобы включить свет. Любые идеи? Кто-то еще предложил использовать sed.

Звучит как забавный проект!

Вы можете сделать это, опрашивая каждые 1-2 секунды с помощью команды ping. Это немного неудобно, но эхо-запросы вызовут незначительные накладные расходы.

  1. Настройте свой DHCP-сервер так, чтобы он всегда выдавал один и тот же IP-адрес вашему iPhone (на основе его MAC-адреса).

  2. Запустите сценарий на вашем компьютере с Linux, который пытается пинговать этот IP-адрес каждые n секунд.

  3. Включите / выключите свет на основе простых критериев отклика на пинг

Если бы у вас было приложение для мониторинга, такое как 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 на некоторых серверах. Я уверен, что то, что вы пытаетесь сделать, не рассматривается ни в одном из примеров, но это возможно.