Automatische Verbindung zu captive Portal AP



  • Hallo,
    ich betreibe derzeit einen kleinen Server der über UMTs, das mich monatlich
    viel geld kostet, Internet bekommt, da das W-Lan das ich bekommen kann durch Captive Portal "geschützt" ist. Dabei handelt es sich um einen Telekomhotspot in den sich jeder mit seinem Gerät einloggen kann. Allerdings muss dafür vorher ein http Request an den Router gesendet werden, der einem daraufhin eine html Seite zuschickt auf der sich ein Button befindet. Mit klicken des Buttons bekommt das Endgerät Internetzugang für ca. 6 Stunden. Nach diesen 6 Stunden(variert auch immer ein bisschen) muss man dann noch mal auf den button klicken. Da ich aber einen Server damit betreiben möchte, soll der quasi selber auf den Button klicken wenn dieser merkt das er kein Internet mehr hat.
    Ich kann halbwegs C programmieren und wollte das dann auch in dieser Sprache implementieren. Meine erste Idee war es die Daten abzufangen die gesendet werden wenn man auf den Button klickt, um diese dann später vom skript senden zu lassen. Das ist mir aber zu kompliziert da ich mich nicht mit Wireshark auskennen und im allgemeine in der Netzwerkentwicklung noch blutig neu bin.
    Ich würde gern diese captive Portal html seite im skript laden und dann das skript einen art click event auf den button ausführen lassen. Meine erste Idee dazu war die libcurl library dazu zu verwenden wenn das geht.
    Wie kriege ich das programmiert, oder gibts da ne deutlich einfachere Variante. Das Betriebssytem auf dem das laufen soll ist Windows 10. Wenn ich das geschafft habe, dann würde ich an eine Implementierung in einem Router nachdenken der sich immer mit dem hotspot verwendet und an den ich alle meine endgeräte anschließen kann ohne immer wieder auf ok zu klicken.
    Das ganze läuft über einen externen Wlan Stick.

    Ich habe den Button im Chrome Browser einmal untersucht. Hier ist der HTML Code.

    <button type="button" class="dtag-button-connect btn btn-primary btn-block center-block ng-scope" data-t-id="btn-free-login" data-ng-click="login.loginForFree()" data-ng-disabled="login.isLoading" data-translate="start.button.goOnline">Online gehen</button>
    

    Ich habe nur ganz wenig Ahnung von javascript und html aber für mich sieht es so aus als müsse man die login.loginForFree() Funktion aufrufen.



  • Mach deine dev tools auf, geh in den "network" tab, click auf den button, rechtsklick den request, dann muesste es da irgendwo die option geben, es als cURL request rauszukopieren (oder auch andere formate).

    Dann kannst das entweder via cURL direkt benutzten, oder hast den request, den du einfach hardcoded verschicken kannst.



  • Cardiac schrieb:

    Mach deine dev tools auf, geh in den "network" tab, click auf den button, rechtsklick den request, dann muesste es da irgendwo die option geben, es als cURL request rauszukopieren (oder auch andere formate).

    Dann kannst das entweder via cURL direkt benutzten, oder hast den request, den du einfach hardcoded verschicken kannst.

    Danke danke, das funktioniert! Allerdings ändert sich ein hashwert in der cURL instruktion bei einem erneuten rauskopieren. Der cURL request sieht so aus.

    curl 'https://hotspot.t-mobile.net/wlan/rest/freeLogin' -H 'Host: hotspot.t-mobile.net' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko/20100101 Firefox/57.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' --compressed -H 'Referer: https://hotspot.t-mobile.net/TD/hotspot/Hotel-0000000001/de_DE/index.html?origurl=http%3A%2F%2Fcaptive.apple.com%2F&ts=8475629340374' -H 'Content-Type: application/json;charset=utf-8' -H 'X-Hash: 6e759a9842f99ac1bbad02c7048c26fc57bc44a5=' -H 'Cookie: DT_DEV_ID=7EqfFqNwflcbQ; JSESSIONID=da39a3ee5e6b4b0d3255bfef95601890afd80709.P2; DT_H=MT3F4wg3MjMy' -H 'Connection: keep-alive' --data '{"rememberMe":false}'
    

    Der X-Hash Wert ändert sich zum Beispiel und es ist auch mal vorgekommen das ich mich dann mit dieser cURL Instruktion nicht beim Hotspot anmelden kann. Ich möchte also das, das Skript automatisch immer wieder einen cURL Instruktion lädt. Die cURL Instruktion habe ich mit dem Firefox erstellt, wie man auch schon dem Code entnehmen kann. Wenn ich allerdings jedes mal den cURL request neu lade, dann wird auch implizit ein klick event auf den Button ausgeführt. Das wäre also redundant. Ich muss also einen quasi dynamisch erzeugte cURL Instruktion senden nur weiß ich da nicht wie ich das machen soll. Hat da Jemand eine Idee?