2010-05-26 4 views
18

Windows sait que vous avez retiré le câble réseau de votre carte réseau. Existe-t-il une manière programmatique de déterminer ceci via l'API en C++?Détection lorsque le câble réseau est débranché

Note: Je n'utilise pas .NET et ce pour un réseau local fermé (non connecté à Internet jamais)

+1

Ping google.com, et si vous n'obtenez aucune réponse, pensez à débrancher le câble. :) – Dima

+1

Cela ne fonctionne que si vous êtes connecté à Internet via une passerelle pas un réseau fermé :) –

Répondre

8

Raymond Chen blogged à propos de quelque chose de similaire récemment. Voici le documentation pertinent. Je pense que le drapeau MIB_IPADDR_DISCONNECTED est ce que vous cherchez.

1

Utilisez le Network List Manager api avec le iNetwork api.

Vous pouvez enregistrer votre application pour recevoir des rappels lorsque les réseaux sont connectés/non connectés.

Ou vous pouvez obtenir la liste des réseaux et vérifier chacun d'entre eux pour voir si la machine est connecté au réseau ou non

Rappelez-vous qu'une machine Windows aura souvent plusieurs réseaux mis en place (Ethernet, wifi, etc. N'oubliez pas que, tout simplement parce qu'un réseau est connecté, vous n'avez peut-être pas accès à Internet. Par exemple, vous pourriez avoir des problèmes de DNS ou de routage. Ou vous pourriez être sur un réseau de travail qui n'est pas connecté à Internet. En raison de ce qui précède, de nombreux outils de diagnostic se connectent également à un serveur Internet «bien connu» s'ils veulent vraiment savoir s'ils sont connectés ou non. Quelque chose comme google.com - ils dépensent beaucoup d'argent pour s'assurer que leur site est en place tout le temps. Enfin, vous pouvez également avoir une situation semi-connectée dans laquelle les paquets passent, mais pas assez pour vraiment permettre le flux des communications. Pour tester ceci, ne faites pas simplement un ping sur un site internet car ce ne serait qu'une paire de paquets. Au lieu de cela, ouvrez une connexion TCP ou quelque chose de plus qu'un ping.

+0

Je ne sais pas pourquoi tout le monde pense que je parle de l'Internet :) Je suppose que j'aurais dû être plus clair, il s'agit plus d'un scénario de réseau local fermé –

+1

INetwork http://msdn.microsoft.com/en-us/library/aa370750(VS.85).aspx vous permet de poser des questions distinctes "suis-je sur un réseau" et "suis-je sur Internet" . Cette réponse vous donne ce dont vous avez besoin. –

+0

Quelque chose pour XP? Cela dit Vista et 2008 seulement –

Questions connexes