Lösen Sie den Captive Portal Assistant ohne Internetverbindung aus

1981
LivePIX

Ich suche nach einer Lösung, um den Captive Portal Assistant unter Android 4.0-7 und iOS 7-10 auszulösen, wenn Sie eine Verbindung zu einem LAN ohne Internetverbindung herstellen.

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-Setup.

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 erreicht werden kann, z. B. 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.

2
Nur ein Kommentar aus einem Jahr nach Ihrer Frage. Sie fragten "Wenn es einen anderen Weg gibt, jemanden zurückzuzahlen, der eine funktionierende Lösung hat, lass es mich wissen." Wenn Sie eine Antwort bestätigen und akzeptieren, können Sie dem Antwortenden einige Wiederholungspunkte geben. Sie müssen also nur die Antwort akzeptieren, die die Lösung hat. Dies ist auch nützlich für Leute wie mich, die nach einer Lösung für ein Problem wie das Ihrige suchen und bei einer akzeptierten Antwort wissen, dass die Lösung funktioniert;) frarugi87 vor 6 Jahren 0

2 Antworten auf die Frage

0
Dyusk

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, was einfach den HTTP-Status von zurückgibt 204. 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 kann durch die Verwendung von NAT mit erreicht werden, iptableswenn die Clients das Debian-System als Gateway festgelegt haben. Dies kann mit einer Regel geschehen, die der folgenden ähnlich ist, wobei APPSERVERdie IP-Adresse Ihres App-Servers lautet:

iptables -t nat -D PREROUTING ! -d APPSERVER -p tcp –-dport 80 -j DNAT –to-destination APPSERVER 

Ich bin mir jedoch nicht sicher, wie gut die Verwendung des Captive-Portalassistenten geeignet ist, da diese oft sehr eingeschränkt sind und der Benutzer möglicherweise Schwierigkeiten hat, zur Anwendung zurückzukehren, wenn er versehentlich den Captive-Portalassistenten 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.

0
djsmiley2k

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.