Comment Windows sait-il s'il dispose d'un accès Internet ou si une connexion Wi-Fi nécessite une authentification dans le navigateur?

132

Sous Windows 7, l’icône réseau de la zone de notification affiche un indicateur d’erreur s’il n’ya pas d’accès à Internet wifi-err, et l’icône d'erreur disparaît une fois la connexion à Internet établie réseautage normal. Parfois, si la connexion Wi-Fi nécessite une étape d'authentification dans le navigateur, comme sur de nombreux réseaux invités dans les hôtels ou les universités, la bulle contextuelle suivante apparaît, indiquant le même résultat: des informations de connexion supplémentaires peuvent être nécessaires, cliquez pour ouvrir votre navigateur

Comment Windows sait-il si sa connexion Internet est établie ou non?
Vraisemblablement, il vérifie un service Microsoft en ligne pour voir s'il a une connexion établie, est redirigé vers une autre page ou ne reçoit aucune réponse, mais je n'ai vu nulle part où ce processus ou les services utilisés étaient documentés. . Quelqu'un peut-il expliquer comment cela fonctionne? Je préférerais des réponses qui se réfèrent à des faits plutôt que de simplement deviner, mais si vous avez une très bonne estimation, alors allez-y.

Cette question était une question de super utilisateur de la semaine .
Lisez l' entrée de blog du 16 mai 2011 pour plus de détails ou soumettez votre propre Question de la semaine.

ne pas penser
la source
1
S'il vérifiait un service Microsoft, comment passerait-il à l'étape d'activation dans le navigateur? Ou est-ce que je vous ai mal compris? (+1 btw, question intéressante)
slhck
@slhck: C'est le but de la vérification: s'il ne peut pas accéder au service correctement, mais que sa tentative obtient une réponse, cela suppose qu'il peut y avoir une étape dans le navigateur. S'il n'y a pas de réponse du tout , cela suppose qu'il n'y a qu'un accès local. Je ne suis pas sûr de savoir comment fonctionne exactement ce processus. J'ai mis à jour ma question pour qu'elle soit un peu plus claire (j'espère).
nhinkle
@nhinkle Je n'ai pas de PC sous Windows, mais quelqu'un peut peut-être lancer Wireshark pour voir ce que la machine fait réellement dans un tel cas.
Slhck
Lorsque l'indicateur d'erreur indique qu'il n'y a pas d'accès Internet, ouvrez le dépanneur réseau. Pendant le dépannage, vous pouvez voir clairement une étape "Essayer de se connecter à Microsoft.com". Donc, je suppose que cela utilise un service.
Mayank

Réponses:

91

Après quelques recherches (le nombre impressionnant de services liés au réseau et à Internet dans Windows est étonnant), je pense l’avoir trouvé. Windows Vista et 7 intègrent diverses fonctionnalités Network Awareness, notamment l'indicateur d'état de la connectivité réseau, qui effectue des tests de connectivité qui sont utilisés par l'icône de la barre des tâches réseau. Le test de la connectivité Internet est simple:

  1. NCSI tente de charger une page spécifique via HTTP (plus précisément: un document texte) et vérifie si elle peut être récupérée.
  2. Si cela n'aboutit pas, Windows indique "Pas d'accès Internet".

Le mécanisme vérifie également si le domaine sur lequel le document est hébergé est résolu en adresse IP attendue. Donc, cela pourrait aussi supposer un accès Internet adéquat si ce test réussit, mais que le document ne peut pas être récupéré.

La raison pour laquelle il signale "Pas d'accès Internet" lorsque vous ne vous êtes pas authentifié sur un Hotspot réside dans le fonctionnement d'un Hotspot. Il bloque tous les ports autres que 80 et 443 (pour HTTP et HTTPS, respectivement), qui sont redirigés vers le serveur d'authentification du point d'accès sans fil et peuvent perturber les requêtes DNS d'une manière ou d'une autre. Ainsi, NCSI ne peut ni résoudre le domaine sur lequel son fichier de test est hébergé, et même s'il le pouvait, il n'atteindrait pas le fichier réel car le trafic HTTP est redirigé vers le serveur d'authentification.

Source: http://technet.microsoft.com/en-us/library/cc766017%28WS.10%29.aspx

Tobias Plutat
la source
13
Un point d'accès devrait autoriser le service DNS, sinon toute tentative d'accès à un serveur par nom d'hôte (plutôt que par adresse IP) échouerait avec une erreur de type "incapable de résoudre l'adresse". En fonction de la configuration du hotspot, il peut résoudre tous les noms en adresses de son serveur d'authentification ou correctement, en s'appuyant uniquement sur la redirection des connexions http (s) vers le serveur d'authentification. La partie DNS des vérifications décrites dans le document aimé permet de vérifier que dns.msftncsi.com se résout en l'adresse correcte, et non si elle est résolue du tout.
Dave Sherohman
1
C'est vraiment correct. J'ai mis à jour la réponse pour refléter cela.
Tobias Plutat
Super trouvaille et bonne description de son fonctionnement! Si aucune meilleure réponse n'apparaît, une prime vous parviendra bientôt.
nhinkle
Il est également dit No Internet accesssi vous êtes derrière un proxy;)
Oscar Mederos
1
Je ne doute pas que ce soit la plupart du temps correct, mais cela semble être incomplet. Parfois, vous aurez un problème avec le DNS et l'icône de connectivité affichera une fenêtre contextuelle indiquant que vous avez accès à Internet mais que le DNS échoue. Je pense qu'il doit y avoir une étape avant l'étape 1 (ou éventuellement après l'étape 1) qui consiste à essayer de résoudre le DNS. Si cela réussit (mais la page ne se charge pas), vous obtenez alors le message d'erreur DNS.
Krowe2
69

Voici les détails du processus de détermination de l'état de la connexion :

La liste suivante décrit comment NCSI peut communiquer avec un site Web pour déterminer si un réseau dispose d'une connectivité Internet:

  1. Une demande de résolution de nom DNS de dns.msftncsi.com

  2. Une requête HTTP pour http://www.msftncsi.com/ncsi.txtretourner 200 OK et le texteMicrosoft NCSI

Cela peut être désactivé avec un paramètre de registre. Si vous définissez

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
     NlaSvc\Parameters\Internet\EnableActiveProbing

to 0, Windows ne recherchera plus la connectivité Internet.

Dans iOS, Apple fait quelque chose de très similaire pour détecter la connectivité Internet et les pages wifi "de connexion" des hôtels, etc.

Jeff Atwood
la source
1
Les versions plus récentes (je pense que Gingerbread et plus récent ...) d'Android le font aussi ... elles afficheront l'icône wifi en blanc si elles peuvent se connecter au réseau, et deviendront vert si elles peuvent atteindre certains hébergés par Google. page. L'idée est la même.
TM.
le kindle fait cela aussi, en quelque sorte. Lorsque je me suis connecté au wifi, il m'a informé que je devais ouvrir mon navigateur et accepter les conditions d'utilisation. Je me demandais comment cela était arrivé aussi.
Kortuk
3
Donc, si msftncsi.com tombait en panne, tous les ordinateurs Windows 7 ne pourraient pas afficher un signal en ligne? Thats génie!
Liamzebedee
8

Comme Jeff l'a dit, pour détecter une connexion Internet, Windows fera:

  1. Requête DNS au serveur
  2. Requête HTTP pour contenu connu

En plus de la réponse de Jeff, je soupçonne:

3 Si la requête HTTP est redirigée vers un Microsoft externe (ou ne renvoie pas le contenu attendu), affichez le message sur votre capture d'écran.

Macke
la source
3

Pour une connexion nécessitant des informations de connexion supplémentaires, il est plus probable de déterminer les informations à l'aide de l'étape de résolution DNS mentionnée par Jeff, dans les trois cas suivants:

  • Si le système résout la bonne adresse, la connexion est entièrement effacée. (Connectivité Internet)
  • Si le système résout une demande DNS mais que l'adresse n'est pas correcte, il y a une ré-orientation (possibilité d'ajouter une information de connexion sur le journal).
  • Si le système ne résout pas une requête DNS, des problèmes de connectivité Internet se posent (la connexion est établie avec le réseau / point d'accès mais pas de connexion Internet).

Je suppose que la demande de:

http://www.msftncsi.com/ncsi.txt

est un moyen rapide de vérifier si la connexion à Internet est claire. Après cela, les requêtes DNS sont exécutées pour déterminer le statut complet de la connexion.

James Mertz
la source