Ich suche nach einer Lösung, um den Captive Portal Assistant unter Android 4.0-7 und iOS 7-10 auszulösen, wenn Sie sich mit einem LAN ohne Internetverbindung verbinden.
Unsere Anwendung läuft von einem Webserver in einem LAN. Wir möchten, dass unsere Benutzer (die normalerweise zum ersten Mal ein Benutzer sind) in der Lage sind, in so wenigen Schritten wie möglich auf die Anwendung zuzugreifen. Das System funktioniert derzeit, indem es sich mit einem WLAN-Netzwerk verbindet, einen Browser öffnet und eine URL eingibt. Wir möchten dies auf einen Schritt reduzieren (Verbindung zum WLAN), wobei der Browser automatisch von dem in Android und iOS integrierten Captive Portal Assistant geöffnet wird.
Ich bin nicht auf der Suche nach einem standardmäßigen Captive-Portal.
Dieses System muss die Captive-Portalassistenten in Android und iOS auslösen, ohne dass eine Anfrage an die von Google oder Apple betriebenen Original-Server gesendet wird. Keine Internetverbindung, nicht jetzt, nicht immer.
Das System basiert auf Debian, wobei HOSTAPD und DNSMASQ DHCP- und DNS-Auflösung ausführen. Der Webserver ist NGINX mit PHP7.0.
Wenn eine Lösung mit anderen für Debian verfügbaren Paketen, z. BIND oder irgendetwas, das das ersetzen könnte, was wir jetzt verwenden. Ich habe kein Problem mit der Änderung der Konfiguration.
Ich habe mich noch nie bei Superuser angemeldet, nur im Schatten gelauert und leise von den fantastischen Mitgliedern viel gelernt. Aus diesem Grund habe ich keinen Ruf, als Kopfgeld anzubieten. Wenn es einen anderen Weg gibt, jemanden zurückzuzahlen, der eine funktionierende Lösung hat, lass es mich wissen.
quelle
Antworten:
Die Erkennung von Captive-Portalen funktioniert im Allgemeinen, indem versucht wird, über HTTP auf eine Seite zuzugreifen und zu überprüfen, ob die zurückgegebene Seite wie erwartet ist.
Android wird sich beispielsweise mit verbinden
http://clients1.google.com/generate_204
, der einfach den HTTP-Status von zurückgibt204
. Vermutlich funktionieren iOS-Clients auf ähnliche Weise.Um Ihre Anwendung in der von Ihnen beschriebenen Weise zu öffnen, müssen Sie einfach alle HTTP-Anforderungen, die noch nicht an Ihren Anwendungsserver gerichtet sind, umleiten. Auf diese Weise erhalten Kunden niemals das erwartete Ergebnis.
Dies könnte durch die Verwendung von NAT mit erreicht werden
iptables
wenn die Clients das Debian-System als Gateway festgelegt haben. Dies könnte mit einer ähnlichen Regel wie folgt erfolgen:APPSERVER
ist die IP-Adresse Ihres App-Servers:Ich bin mir jedoch nicht sicher, wie geeignet es ist, den Captive-Portalassistenten zu verwenden, da diese oft sehr eingeschränkt sind und der Benutzer möglicherweise Schwierigkeiten hat, zur Anwendung zurückzukehren, wenn er den Captive-Portalassistenten versehentlich schließt. Einige ältere Geräte können möglicherweise nicht automatisch das Vorhandensein eines Captive-Portals erkennen. Da der Benutzer niemals über Ihr Netzwerk auf das Internet zugreifen kann, zeigt der Assistent des Captive-Portals möglicherweise weiterhin regelmäßig Ihre Anwendung an oder weist auf das Netzwerk hin, dass es keinen Internetzugang hat, und verhindert zukünftige Verbindungen.
quelle
Das Beste, was ich finden konnte, war eine Antwort auf Serverfault (was eigentlich eine bessere Seite für diese Frage ist): Hier
Grundsätzlich führen Sie eine vorgefertigte Anwendung / einen Container aus, der die gesamte Arbeit für Sie erledigt.
quelle