Обнаружение изменений доступности сетевого подключения - PullRequest
0 голосов
/ 27 марта 2019

Я пишу приложение Go для Mac и Windows, которое будет выполнять некоторые действия при изменении сети (клиент переходит с Wi-fi 1 на Wi-fi 2 или с 3G на LAN).Мне известно о решении для приложения, работающего на Mac, на быстром языке, но я ищу здесь решение, не зависящее от платформы.

Пока я пытался проверить событие в интерфейсе, но я не уверен, чтоэтого достаточно.

Я ожидаю, что при смене сети (переход с Wifi-1 на Wifi-2 или 3G или LAN) мое приложение Go должно знать, что нужно предпринять какие-то действия.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Я сомневаюсь, что было бы такое решение.

Каждый проект, который пытается предоставить какое-либо платформо-независимое решение для проблемы, связанной с ОС, неизбежно скрывает специфичные для платформы детали за общим API. Посмотрите на https://github.com/fsnotify/fsnotify для хорошего примера.

Итак, я бы пошел по этому пути и подготовил бы пакет, который имел бы два специфичных для платформы «бэкенда», которые были бы скомпилированы условно с использованием тегов сборки.

Чтобы получать уведомления о сетевых событиях под Windows, Вы, вероятно, должны начать здесь . К сожалению, этот материал ориентирован на COM, но вы можете использовать https://github.com/go-ole/go-ole, чтобы помочь с этим.

Вы также можете задать не относящийся к Go вопрос с тегом winapi, чтобы узнать, как лучше всего подключиться к ядру, чтобы получать уведомления о доступности сетей.

0 голосов
/ 18 июня 2019

Не существует независимого от платформы решения, однако на таких платформах, как OSx, Linux, Windiws есть способы получать сетевые события со своими специфическими для платформы ограничениями.

OSx : необработанный сокет SOCK_RAW типа AF_ROUTE может использоваться для обнаружения любых сетевых событий, происходящих на пользовательском компьютере. Существуют различные типы сетевых событий, которые могут быть обнаружены. В этой теме рассказывается о примере в BSD для сетевого события

Windows : API-интерфейсы Windows даны как часть библиотеки iphlpapi. Такие API, как NotifyAddrChange, NotifyRouteChange, позволяют вам иметь почти все сетевые события (кроме изменения метрики и т. Д.) В этом репозитории git есть рабочий пример NotifyAddrChange, который возвращает и событие, когда интерфейс отключается или появляется.

Linux : В Linux сокеты netlink позволяют приложению пространства пользователя получать сетевые события, используя сокеты netlink.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...