Подтвердить что ты не робот

Обнаружение при отключении сетевого кабеля

Windows знает, когда вы удалили сетевой кабель из своей сетевой платы. Есть ли программный способ определить это через API в С++?

Примечание. Я не использую .NET, и это для закрытой локальной сети (не подключенной к Интернету когда-либо).

4b9b3361

Ответ 1

Раймонд Чен в блоге о чем-то подобном недавно. Ниже приведена соответствующая документация. Я думаю, что флаг MIB_IPADDR_DISCONNECTED - это то, что вы ищете.

Ответ 2

Используйте Network List Manager api с помощью приложения INetwork.

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

Или вы можете получить список сетей, а затем проверить каждый из них, чтобы узнать, подключен ли компьютер к сети или нет.

Помните, что на компьютере с Windows часто будет установлено несколько сетей (Ethernet, Wi-Fi и т.д.)

Помните, что только потому, что сеть подключена, у вас может не быть доступа к Интернету. Например, у вас могут быть проблемы с DNS или маршрутизацией. Или вы можете быть в рабочей сети, которая не подключена к Интернету.

Из-за вышеизложенного многие диагностические инструменты также подключаются к "хорошо известному" интернет-серверу, если они хотят знать, связаны ли они или нет. Что-то вроде google.com - они тратят много денег, чтобы убедиться, что их сайт все время.

Наконец, вы также можете иметь ситуацию с полусвязью, когда пакеты проходят, но недостаточно, чтобы действительно разрешить потоки связи. Чтобы проверить это, не просто ping интернет-сайт, так как это будет только пара пакетов. Вместо этого откройте TCP-соединение или что-то большее, чем ping.