2 votes

Comment rediriger toutes les requêtes web des hôtes connectés au hotspot vers un serveur web local ?

J'ai littéralement la même question que celle posée dans ce post : Comment rediriger tout le trafic sortant du téléphone vers un serveur proxy ?

J'ai un téléphone Android qui fait office de serveur de hotspot (en utilisant KWS). Je suis capable de connecter un autre appareil et d'accéder à ma petite page web en tapant 192.168.43.1:8080 dans la recherche d'URL de mon navigateur, donc pas de problème là.

Cependant, j'aimerais que toutes les demandes des appareils connectés soient redirigées vers ma page Web.

La réponse à la question liée suggère d'exécuter deux serveurs DNS en utilisant l'application Server's Ultimate. Ma seule hésitation est qu'elle n'est pas gratuite, et que la version "gratuite" est une version d'essai de 7 jours. J'ai essayé une autre application appelée "Set DNS", qui semble prometteuse, mais elle ne reconnaît pas mon hotspot comme un réseau ; elle attend toujours que je me connecte à quelque chose.

QUESTIONS :

  • Puis-je simplement changer le /system/etc/hosts comme indiqué dans l'article en lien ?
  • J'ajouterais une ligne telle que : 192.168.43.1:8080 * ?
  • Sinon, dois-je acheter Server's Ultimate, ou existe-t-il une autre alternative ?

PS : Il s'agit d'une publicité. La page Web doit être statique et informative (pas d'activité malveillante).

1voto

Irfan Latif Points 16863

La solution proposée ici nécessite un accès Root.

Je voudrais que toutes les requêtes des appareils connectés soient redirigées vers ma page Web.

Lorsque vous créez un hotspot, Android exécute dnsmasq comme serveur DHCP/DNS (jusqu'à Android 9). Nous pouvons utiliser ce serveur DNS pour résoudre chaque domaine à votre adresse IP désirée. Créer un fichier /system/etc/dnsmasq.conf et ajoutez l'option suivante :

address=/#/192.168.43.1

Voir les détails dans page d'accueil . Démarrez le hotspot et testez. De la même manière, vous pouvez utiliser d'autres serveurs DNS sur votre appareil Android, par ex. dnscrypt-proxy .

Vous devez vous assurer que les hôtes connectés n'utilisent pas un DNS public tel que 1.1.1.1 Il faut utiliser le DNS fourni par DHCP, c'est-à-dire l'adresse IP de l'appareil Android. Ou rediriger tout le trafic DNS vers le serveur DNS local :

~# iptables -t nat -I PREROUTING -p UDP --dport 53 -j REDIRECT --to 53

Pour http://example.com La demande est adressée à 192.168.43.1:80 et pour https://example.com il va à 192.168.43.1:443 . Cependant, si vous tapez http://example.com/test.html il demande la page 192.168.43.1:80/test.html qui devrait exister, sinon une erreur sera renvoyée. Un moyen simple consiste à configurer votre page Web d'annonce comme page d'index et page d'erreur par défaut. Par exemple index-file.names y server.error-handler options sur lighttpd .


  • Puis-je simplement changer le /system/etc/hosts comme indiqué dans l'article en lien ?
  • J'ajouterais une ligne telle que : 192.168.43.1:8080 * ?

hosts est utilisé par les résolveurs DNS qui font généralement partie de la bibliothèque C principale du système d'exploitation. Pour autant que je sache, les résolveurs intégrés sur Android/Linux/Windows ne supportent pas les wildcards, donc le fichier * L'astuce ne fonctionne pas. Deuxièmement, les noms de domaine sont résolus en adresse IP ( 192.168.43.1 ) et non des ports ( :8080 ). Voir les liens ci-dessous pour plus de détails sur le DNS.

Les navigateurs Web utilisent par défaut le port 80 para http demandes. Si vous exécutez le serveur sur un autre port, vous devez mentionner le port sur le navigateur web. Ou rediriger tout le trafic TCP nouvellement généré à partir du port 80 a 8080 :

~# iptables -t nat -I PREROUTING -m conntrack ! --ctstate RELATED,ESTABLISHED -p tcp --dport 80 -j REDIRECT --to 8080

RELATED :

0voto

nagam Krishna Points 11

J'ai créé une application qui utilise la solution similaire mentionnée par Irfan. Il a une interface très minimale et nécessite la permission de Root. Vérifiez ici : https://forum.xda-developers.com/Android/general/guide-setup-fake-captive-portal-Android-t4011689

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