Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Eigener Hotspot - Captive Portal
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

Themenstarter:

Eigener Hotspot - Captive Portal

beantworten | zitieren | melden

Hallo zusammen,

es gibt da ein Szenario, für dessen Lösung ich mir schon seit einigen Tagen den Kopf zerbreche (und irgendwie keinen richtigen Ansatz finde): Es soll ein (unverschlüsselter) WLAN-Hotspot bereit gestellt werden. Wenn man sich in dieses WLAN eingewählt hat, kann man darüber nur eine einzige Webseite erreichen.
Ein Use-Case wäre z.B., dass man in eine Kantine kommt, sich mit seinem Smartphone in das Kantinen-WLAN einwählt und das komplette Menüangebot für die aktuelle Woche angezeigt bekommt.

Das Erstellen eines WLAN-Netzwerkes mit Windows 7/8-Boardmitteln ist kein Problem. Ebensowenig das Bereitstellen der Webseite. Was mir das Kopfzerbrechen macht, sind die folgenden beiden Wünsche:
  • Es soll - egal welche Web-Adresse im Browser eingegeben wird(!) - immer auf die eine Portal-Webseite umgeleitet werden (läuft oft unter dem Begriff "captive portal").
  • Nach dem Verbinden zum WLAN soll die Portal-Webseite sofort geöffnet werden.

Diese beiden Funktionen kenne ich z.B. von Hotel-WLANs. Man kann sich ins WLAN einwählen, wird aber (zunächst) immer auf die WiFi-Login-Seite umgeleitet; oder man muss zunächst die AGBs für die freie Internetbenutzung bestätigen (wie es z.B. oft bei populären Restaurants/Cafés angeboten wird). Ebenso kenne ich es vom Smartphone, dass gleich nach dem Verbinden zum WLAN die entsprechende Login/AGB/...-Seite geöffnet wird.

Kann ich diese Funktionen irgendwie unkompliziert und mit Boardmitteln umsetzen? Zielsystem ist Windows 7/8; der Webserver (IIS) läuft auf dem gleichen Rechner, der den Hotspot bereit stellen soll; eine Freigabe der Internetverbindung ist nicht notwendig (und auch nicht gewünscht).

Es wäre schön, wenn mir jemand einen Stups in die richtige Richtung geben könnte :-)

dN!3L
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.105

beantworten | zitieren | melden

Ahnung hab ich keine aber eine Idee :-)
Dein WLAN braucht ein DNS System. Wenn du das so aufsetzen kannst dass es alles an den lokalen Rechner weiterleitet hast du schon das gröbste geschafft.
Im Webserver leitest du dann alles was nicht deinen Wünschen entspricht an eine neue URL um.
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

Eigener DNS Server, der auf alle Anfragen mit der lokalen IP antwortet klingt vernünftig.

Die automatische Umleitung auf die Startseite wird meist mit einem versteckten HTTP-Request realisiert.

Bei iOS sieht das wie folgt aus:
GET /library/test/success.html HTTP/1.0
Host: [URL]www.apple.com[/URL]
User-Agent: CaptiveNetworkSupport/1.0 wispr
Connection: close

Apple erwartet, dass hier mit StatusCode 200 geantwortet wird. Wenn hingegen ein HTTP-Redirect zurückkommt (StatusCode 302), sollte sich magisch der Browser mit dieser Seite öffnen.

Google/Android fragt nach http://clients3.google.com/generate_204 und erwartet StatusCode 204, also auch hier einfach mit redirect (302) antworten.

Windows fragt nach http://www.msftncsi.com/ncsi.txt und erwartet StatusCode 200 mit der exakten Antwort "Microsoft NCSI".

Der Post How to create WiFi popup login page hilft dir vielleicht auch weiter.

Diese Anfrage-Pattern müsstest du anhand von Host/Domain/User-Agent eigentlich gut herausfiltern können, beispielsweise mit URL rewrite rules. Oder einfach auf alles mit nem 302-Redirect antworten, was nicht deiner normalen Kantinen-Url entspricht.

Stichwort hast du ja eigentlich schon genannt: "Captive Portal Detection"

beste Grüße
zommi
Dieser Beitrag wurde 9 mal editiert, zum letzten Mal von zommi am .
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

so spontan fallen mir 2 Wege ein:
1. statisches Routing (alle Adressen werden auf den Webserver geroutet, und der catcht alle Zugriffe und zeigt das Portal an, entspricht dem Vorschlag von chilic)
2. ein transparenter Proxy, der alle Anfragen auf das Portal weiterleitet.

Im Prinzip ist es immer das selbe: Musst halt auf jeden Fall alle Anfragen abfangen, ob das nun der Webserver oder der Router oder eben ein Proxy macht, ist eine Implementierungsfrage.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 2.891

Themenstarter:

beantworten | zitieren | melden

Das "Ahnung hab ich keine aber eine Idee" ist genau das Problem, was ich habe :-)

Die beiden Möglichkeiten, die gern genutzt werden, sind:
  • HTTP-Redirect. Die Umleitung an sich ist trivial, wie allerdings komme ich an die Stelle, an der man alle HTTP-Requests - egal an welche IP - manipulieren kann?
  • DNS-Redirect. Man macht quasi ein DNS-Poisoning (mit TTL=0, damit die Auswirkungen nicht so groß sind). Aber auch hier wieder - wie bekomme ich denn die Hotspot-User davon überzeugt, dass ich der zu verwendende DNS-Server bin? Und wie implementiere ich den am besten?

Wie gesagt, Ideen habe ich auch, aber wie würde eine konkrete Implementierung aussehen? Kann ich einfach so alle HTTP-Requests abfangen? Kann ich einfach einen eigenen DNS-Server implementieren? Wie mache ich möglichst wenig "kaputt" (wie kann ich das Server-System einfach in den Ursprungszustand versetzen und funktionieren die Clients nach einem Disconnect vom Netzwerk wieder normal)?
private Nachricht | Beiträge des Benutzers
zommi
myCSharp.de - Member

Avatar #avatar-2617.png


Dabei seit:
Beiträge: 1.361
Herkunft: Berlin

beantworten | zitieren | melden

Um TTL=0 müsstest du dir meines Wissens keine Sorge machen.

Alle Clients sollten bei einem disconnect/reconnect ihre DNS-caches so oder so leeren. Wenn da Leichern übrig bleiben würden, würde da irgendwie einfach alles schief laufen.

Du musst beide Möglichkeiten kombinieren!
Ohne den DNS-Server und ne gescheite Antwort sendet der Client ja kein einziges HTTP-Paket los.
Zitat
wie bekomme ich denn die Hotspot-User davon überzeugt, dass ich der zu verwendende DNS-Server bin
Der Hotspot verteil über DHCP an die Clients IP-Adressen und DNS-Server Adressen. Hier trägst du die IP deines DNS-Servers ein.
Zitat
Kann ich einfach so alle HTTP-Requests abfangen?
Ja, machen alle so ;) (HTTPS hingegen geht nicht)
Zitat
Kann ich einfach einen eigenen DNS-Server implementieren?
Ja klar, das Protokoll ist einfach. Aber ich würde da nach einem kleinen Tool suchen.
Zitat
Wie mache ich möglichst wenig "kaputt"
Auf den Clients kannst du wenig kaputt machen.
Zitat
wie kann ich das Server-System einfach in den Ursprungszustand versetzen
DNS-Server abschalten. Bzw vielmehr musst du beim DHCP-Server den dort hinterlegten DNS-Server anpassen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von zommi am .
private Nachricht | Beiträge des Benutzers