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

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

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

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

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

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

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

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

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

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

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

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

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

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

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