Определить, когда устройство подключается к беспроводной сети (маршрутизатор аэропорта)

917
Tal

Я пересылаю этот вопрос с более четким описанием, так как другой был закрыт. Не уверен, есть ли другой способ сделать это или нет.

Есть ли способ определить, когда устройство подключается к моей сети через терминал (Mac). Я хочу вызвать определенные действия, когда вернусь домой и надеялся использовать, когда мой телефон подключится к Wi-Fi в качестве триггера.

Я понимаю, что он будет подключаться / отключаться, когда я дома, поэтому я собирался поэкспериментировать с фильтрацией их в программном обеспечении, но сейчас есть какой-нибудь способ узнать, какие устройства включены.

Я не против просто искать MAC-адреса. Скорее не придется джейлбрейк телефона для решения.

У меня есть временная капсула (по сути, экстремальный аэропорт) в качестве моего маршрутизатора.

0
Если у вас всегда включен компьютер, он может обнаружить присутствие другого устройства, сканирующего сеть и проверяющего MAC-адрес. У меня есть скрипт оболочки PHP, который делает именно это. Я использую его в реверсе для сканирования, когда устройство отсутствует, чтобы обнаружить, если соединение не работает. У вас есть компьютер Mac или Linux и он доступен? FrancescoMM 6 лет назад 0

4 ответа на вопрос

0
davidgo

Делать это, вероятно, будет чрезвычайно сложно, если это вообще возможно. В зависимости от вашего оборудования, требований и навыков может иметь больше смысла взглянуть на какое-то «обходное решение».

Можно подумать, что WIFI-соединению вашего телефона всегда назначается определенный IP-адрес (либо статическая адресация, либо получение маршрутизатором Wifi динамического назначения статического IP-адреса), а затем запускать периодический скрипт (Cronjob на вашем MAC?), Который пингует ваш сотовый телефон и ищет ответ [или добавление своего MAC-адреса в кэш arp, если он не отвечает]. Это, наверное, самое простое решение.

Предполагая [у меня нет продуктов Apple, и я никогда не играл с Radius Authentication для устройств WIFI], альтернативой может быть обновление / перенастройка маршрутизатора, чтобы выполнить Radius Authentication для вашего соединения WIFI, запустить сервер Radius на вашем Mac и запустить его скрипт, который вы хотите запустить при подключении.

Похоже, что любое решение потребует изменения роутера, может быть, Mac будет выполнять свои обязанности. Tal 11 лет назад 0
0
Brad Patton

Единственный вариант, о котором я могу подумать, - это приложение на iPhone, которое знает, когда оно дома. В iOS 4 добавлены фоновые службы определения местоположения с областями на основе фигур (иногда их также называют геозонами). Приложение может быть настроено для вызова вашего сервера для запуска желаемого поведения.

Конечно, это приложение должно быть написано и затем одобрено Apple или запущено в режиме тестирования на вашем телефоне.

Я живу в городе, и геолокация не может быть достаточно точной для моих целей. :( Tal 11 лет назад 0
0
JohnnyVegas

Используя версию программы Airport Utility для Windows, вы можете включить системные журналы. Я уверен, что есть утилита регистрации системы, которая создает действия при передаче определенных журналов. Когда компьютер входит в систему, установите действие, соответствующее этому системному журналу.

0
FrancescoMM

Я использую скрипт PHP "shell", похожий на этот, запускаемый из терминала, чтобы проверить, не работает ли одно или несколько устройств. Я использую его для мониторинга, если мост Wifi вышел из строя (если он не видит MAC-адрес устройств на другой стороне моста, то предположим, что он отключился):

#!/usr/bin/php <?php $MULTICAST_ADDR='192.168.99.255'; $DEVICES_TO_TEST_FOR_BRIDGE=array( // list of MACs 'XX:XX:63:f2:XX:XX', 'XX:XX:d0:ad:XX:XX', 'XX:XX:b9:eb:XX:XX' ); $SLEEP=10000000; // one sec = 1000000, sleep before reconnect   while(TRUE) { usleep($SLEEP);  flush();  `ping -b -c 3 -t 3 $MULTICAST_ADDR 2> /dev/null`;  flush();  $res=`arp -an`;  $bridgeIsOn=FALSE; echo("DEVICES:\n"); echo($res); echo("\n");  foreach($DEVICES_TO_TEST_FOR_BRIDGE as $deviceToTestForBridge) { if (strpos($res, $deviceToTestForBridge) !== false) { $bridgeIsOn=TRUE; $lastBridgeOn=time(); } }  if(!$bridgeIsOn && (time()-$lastBridgeOn>5*60) ) { // If bridge is down for 5 minutes echo(" BRIDGE HAS BEEN OFF FOR LONG (".(time()-$lastBridgeOn)."s) - REQUESTING A RESTART\n");  // Do something here } } 

Что он делает, как в терминале, набрав

 ping -b -c 3 -t 3 192.168.99.255 2> /dev/null 

Мои устройства находятся в диапазоне 192.168.99.xxx, .255 означает «их всех». Так что пингуйте их всех и игнорируйте ответы.

А затем чтение таблиц ARP с помощью команды

 arp -an 

Остальная часть кода заключается в сравнении списка с устройствами, которые я хочу. В конце цикла $ bridgeIsOn имеет значение ИСТИНА или ЛОЖЬ, а у $ lastBridgeOn есть время, когда он последний раз был замечен, поэтому я могу выбирать и выполнять какие-то вещи. В вашем случае вы должны изменить логику, $ bridgeIsOn означает, что ваш телефон находится в сети:if($bridgeIsOn) { /* do something */}

Я сохраняю скрипт как «monitorbridge», делаю его исполняемым и запускаю в терминале

 ./monitorbridge 

Скрипт остается включенным, пока я не закрою терминал или не наберу ^ C. Конечно, вы можете запустить его при входе в систему или при загрузке.

Это работает на Linux Mini PC, но оно должно работать в основном одинаково на любом компьютере, на котором установлен PHP и принимает команды ping и arp. в Windows, чтобы запустить его, вы бы назвали его с помощью `php monitorbridge` вместо просто`. / monitorbridge`, но по сути это должно работать так же. На Mac он работает нормально, если включен PHP. Синтаксис команд ping и arp может быть скорректирован FrancescoMM 6 лет назад 0

Похожие вопросы