Как обнаружить Split Horizon DNS с одного устройства

Я создаю приложение для iOS, которое использует Bonjour для обнаружения устройств в той же сети WiFi. Он отлично работает в некоторых сетях, но не в других (например, Starbucks или Panera). Устройства видят себя, но не друг друга.

Я получил совет, что эти сети могут использовать Split Horizon DNS. Я подтвердил, что не могу пропинговать одно устройство от другого.

Проблема в том, что я хочу показать сообщение об ошибке, если сеть WiFi не работает.

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

Какова лучшая стратегия для обнаружения Split Horizon с одного устройства? Другими словами, я не могу пропинговать другое устройство во время выполнения, так как я ничего не знаю о других устройствах.

3 ответа

Решение

Как уже упоминалось, это почти наверняка связано с изоляцией беспроводных клиентов. Это имеет смысл делать это в общественных сетях Wi-Fi, и я был бы удивлен, если какие-либо публичные сети не делают этого. (С включенной связью клиент-клиент кто-то может сидеть в сети, пытаясь взломать устройства других пользователей. Это большой риск для безопасности пользователей, и когда вы предоставляете горячую точку для доступа в Интернет, в чем смысл, чтобы клиенты могли видеть друг друга).

Если вы вообще не можете пропинговать других клиентов (по IP-адресу), то это явно не имеет никакого отношения к DNS.

Я не вижу никакого способа обнаружить это, и нет никакого реального простого решения, чтобы обойти это. Некоторые приложения используют центральный сервер, к которому подключаются все клиенты, который передает данные между клиентами (например, приложениями для обмена мгновенными сообщениями), хотя в зависимости от цели вашего приложения это может быть нереальным решением.

Наиболее очевидный ответ заключается в том, что ваше приложение просто должно сообщить пользователю, что оно не может найти других клиентов, возможно, с помощью кнопки / раздела с дополнительной информацией, в которой подробно описывается тот факт, что оно может быть не в состоянии обнаружить других клиентов в определенных сетях (особенно публичные).

Такие места, как Starbucks, целенаправленно используют изоляцию устройства, чтобы один клиент не мог общаться с другим. Это по замыслу.

Это действительно не имеет ничего общего с DNS.

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

Это просто основано на теории сетевых протоколов - я никогда не программировал на iOS, поэтому понятия не имею, как реализовать. Удачи!

Другие вопросы по тегам