Определить, когда сетевой кабель отключен - PullRequest
19 голосов
/ 26 мая 2010

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

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

Ответы [ 2 ]

9 голосов
/ 27 мая 2010

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

1 голос
/ 27 мая 2010

Используйте Network List Manager API с INetwork API.

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

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

Помните, что на машине с Windows часто настроено несколько сетей (Ethernet, Wi-Fi и т. Д.)

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

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

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

...