12 votes

Le wifi Android indique "Connecté, pas d'internet", mais internet fonctionne parfaitement

C'est une chose étrange qui a commencé à se produire avec le réseau wifi au travail. Les appareils Android connectés au réseau indiquent "Connecté, pas d'internet" cependant internet fonctionne parfaitement bien. Cela est arrivé sur des appareils fonctionnant sous Android 6 et 7. Il s'agit d'une petite entreprise aux États-Unis et il n'y a pas de proxy ni de portail captif qui bloque un DNS quelconque. Les ordinateurs portables Windows et Ubuntu se connectent et indiquent que tout est en ordre, semble être quelque chose de spécifique à Android.

Est-ce que quelqu'un sait comment Android détermine exactement si un réseau a accès à internet? Il semble que la solution se trouvera dans la configuration du routeur, mais savoir ce qui pourrait provoquer ce comportement d'Android serait utile. Quelles étapes pourrait-on prendre pour résoudre ce problème?

1 votes

Ce serait utile de savoir quels appareils vous utilisez qui posent ce problème. Si les appareils sont tous du même fabricant et que cela fonctionne correctement lorsque vous vous connectez avec un appareil d'un fabricant différent, cela limiterait les choses. Mais si cela arrive avec des appareils de plusieurs fabricants, je supposerais que cela a quelque chose à voir avec la configuration de votre routeur, mais c'est vraiment un problème bizarre.

0 votes

Je vois cela parfois au travail; j'ai tendance à l'ignorer. Nous utilisons des Solutions Umbrella pour capturer le trafic web illicite.

1 votes

Un autre point à clarifier : Tous vos services Google fonctionnent-ils correctement ? Avez-vous par exemple essayé d'utiliser Playstore, GMail, etc. ? Je ne suis pas sûr à 100 %, mais pour autant que je me souvienne (AFAIR), la détection utilise une certaine IP de Google et vérifie si elle peut être atteinte.

5voto

xavier_fakerat Points 9582

Peut-être que cela semble susceptible d'être un problème de connexion aux serveurs Google (serveur de portail captif) et non la connexion au portail captif configuré dans le navigateur que vous semblez mentionner dans votre message.

(Depuis Lollipop (5.1+)) Lorsque connecté à des réseaux (surtout des réseaux Wi-Fi), le système Android vérifie s'il y a une connexion internet active en effectuant des vérifications sur certaines URLs prédéfinies appartenant aux serveurs Google. S'il échoue, il y aura un point d'exclamation sur l'icône du signal Wi-Fi et une notification "Connecté, pas d'accès internet" est affichée (même si vous pouvez accéder à d'autres sites web et que l'internet fonctionne) donc il peut s'agir d'un problème temporaire de connectivité à cette URL spécifique :

Android essaie d'atteindre un fichier nommé generate_204 sur l'un des serveurs Google et s'il n'y a pas de réponse positive, cela signifie qu'il n'y a pas de connexion à l'internet, et une notification est générée aussi, l'URL de détection diffère entre les différentes versions d'Android.

  • clients3.google.com/generate_204 check (kitkat)

  • connectivitycheck.gstatic.com/generate_204 (marshmallow)

Il semble que Google ait modifié la détection de portail captif sur les versions récentes d'Android, par exemple Oreo.

Il semble que Google vérifie maintenant à la fois un generate_204 sur connectivitycheck.gstatic.com et un gen_204 sur www.google.com.

Encore une fois, c'est un problème en soi, surtout dans les régions où l'accès aux services Google est bloqué. Cependant, cette réponse explique bien comment contourner cela et vous pouvez y jeter un coup d'œil.

Une partie de l'information a été extraite de cette discussion.

Sur la base de cela, vous avez plusieurs options pour contourner cela :

  1. Changer le serveur de portail captif

    • Installez une application de terminal, sinon ces commandes peuvent également être exécutées via adb shell.

    • Ouvrez l'application de terminal et exécutez su.

    • Exécutez settings get global captive_portal_server. Cela affichera le serveur de portail captif actuel. Une réponse "null" est généralement la valeur par défaut.

    • Exécutez settings put global captive_portal_server VOTRE_ADRESSE_SERVEUR. Vous pouvez ajouter google.com comme serveur de portail captif, c'est-à-dire settings put global captive_portal_server google.com.

    • Exécutez exit une fois pour quitter su, puis sortez encore une fois pour fermer le terminal.

    • Redémarrez l'appareil Android. Cela ne fonctionnera pas sans redémarrage.


  1. Désactiver le portail captif
  • Puisque le coupable est une méthode isCaptivePortal() qui accède à clients3.google.com/generate_204 pour tester si une connexion est jugée "utilisable". La page, comme son nom l'indique, est conçue pour toujours renvoyer un code de statut HTTP 204. Sur cette base, vous avez quelques options :

i. Désactiver complètement isCaptivePortal()

  • avec adb configuré, exécutez adb shell su -c "settings put global captive_portal_detection_enabled 0" (Android 7.1+) ou en utilisant adb shell su -c "settings put global captive_portal_mode 0"

Note : Le désavantage est que isCaptivePortal() est en fait utile pour détecter par exemple quand un réseau Wi-Fi nécessite une connexion. Si la requête à la page 204 est redirigée vers une page de connexion (pas un 204), le système comprendra et affichera le point d'exclamation comme prévu.

ii. Changer la cible de isCaptivePortal()

  • une autre solution de contournement est de remplacer l'hôte Google par un hôte qui est accessible dans la région spécifique. Cet hôte doit également renvoyer 204 à chaque fois que /generate_204 est accédé.

    c'est-à-dire adb shell su -c "settings put global captive_portal_server {hôte_alternatif} "


  1. Utilisation de hosts

    • Vous pouvez modifier hosts pour bloquer l'URL de détection de portail captif, contournant ainsi l'envoi des requêtes au serveur de portail captif.

Pourquoi Linux et Windows se connectent-ils sans problème ?

Comme vous l'avez mentionné dans votre message, cela semble spécifique à Android, en effet la discussion ci-dessus le met en évidence. La raison en est que pour ces appareils (Linux et Windows), le mécanisme de connexion est complètement différent.

Ces appareils n'auront pas besoin de se connecter aux serveurs Google pour détecter d'abord si une connexion internet est active.

1 votes

Utiliser la commande adb shell su -c "settings put global captive_portal_mode 0" a fonctionné pour moi sans redémarrage (Android 8.1, MIUI 10). Juste une petite note pour les autres.

0voto

Serafin Rusu Points 101

Vérifiez l'heure et la date sur votre appareil Android. Dans l'ère du https, il est très important d'avoir la date et l'heure synchronisées avec la réalité. J'ai eu ce problème aujourd'hui avec ma télévision et elle était en retard de quelques années. :)

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X