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, iptables
wenn die Clients das Debian-System als Gateway festgelegt haben. Dies kann mit einer Regel geschehen, die der folgenden ähnlich ist, wobei APPSERVER
die 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.