automatisierte meinhotspot.com Anmeldung durch die Fritzbox.

JokerGermany

Mitglied
Mitglied seit
7 Aug 2007
Beiträge
606
Punkte für Reaktionen
6
Punkte
18
In der Hoffnung auf mehr Resonanz zu treffen, poste ich den Thread auch mal in dieser Kategorie, der Thread kann man löschen:
http://www.ip-phone-forum.de/showthread.php?t=291980

Folgendes:
Meine FB 7490 hat ein freetz installiert über das es eine openvpn Verbindung aufbaut worüber auch die Telefonie läuft.

Bin für etwas mehr als einen Monat geschäftlich untergebracht wo das Internet durch meinhotspot.com bereitgestellt wird.
Alle 2 Stunden muss man erneut die Nutzungsbedingungen akzeptieren...

Unter http://192.168.11.1/status kann man nachsehen wie viel Zeit noch vergeht bis man erneut akzeptieren muss.

Code:
<html>
<head>
<title>mikrotik hotspot > status</title>

<meta http-equiv="refresh" content="60">

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
<style type="text/css">
<!--
textarea,input,select {
    background-color: #FDFBFB;
    border: 1px #BBBBBB solid;
    padding: 2px;
    margin: 1px;
    font-size: 14px;
    color: #808080;
}

.tabula{
 
border-width: 1px; 
border-collapse: collapse; 
border-color: #c1c1c1; 
background-color: transparent;
font-family: verdana;
font-size: 11px;
}

body{ color: #737373; font-size: 12px; font-family: verdana; }

a, a:link, a:visited, a:active { color: #AAAAAA; text-decoration: none; font-size: 12px; }
a:hover { border-bottom: 1px dotted #c1c1c1; color: #AAAAAA; }
img {border: none;}
td { font-size: 12px; padding: 4px;}

-->
</style>
<script language="JavaScript">
<!--

    function openLogout() {
    if (window.name != 'hotspot_status') return true;
        open('http://192.168.11.1/logout', 'hotspot_logout',  'toolbar=0,location=0,directories=0,status=0,menubars=0,resizable=1,width=280,height=250');
    window.close();
    return false;
    }
//-->
</script>
</head>
<body bottommargin="0" topmargin="0" leftmargin="0" rightmargin="0"

>
<table width="100%" height="100%">

<tr>
<td align="center" valign="middle">
<form action="http://192.168.11.1/logout" name="logout" onSubmit="return openLogout()">
<table border="1" class="tabula">

    <br><div style="text-align: center;">Welcome MacAdresse!</div><br>

    <tr><td align="right">IP address:</td><td>192.168.11.15</td></tr>
    <tr><td align="right">bytes up/down:</td><td>14.1 MiB / 78.4 MiB</td></tr>

    <tr><td align="right">connected / left:</td><td>1h2m34s / 57m26s</td></tr>


    <tr><td align="right">status refresh:</td><td>1m</td>


</table>

</form>

</td>
</table>
</body>
</html>

Ist die Zeit abgelaufen wird die Seite http://connect.meinhotspot.com/de/client/welcome aufgerufen.
Dort muss man ein als Button getarntes Formular abschicken.
Code:
<!DOCTYPE html><html class="no-js">

<head data-url="/welcome-page-prototype">
    <meta charset="utf-8">

    <title>MeinHotspot - Wireless Captive Portal</title>     <link href="/img/favicon/MeinHotspot.png" rel="shortcut icon"  type="image/vnd.microsoft.icon">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="HandheldFriendly" content="True">
<meta name="cleartype" content="on">
<meta name="robots" content="NOINDEX,NOFOLLOW">
<meta name="copyright" content="[URL="http://meinhotspot.com"]meinhotspot.com[/URL]">
<meta name="publisher" content="[URL="http://meinhotspot.com"]meinhotspot.com[/URL]">
<meta name="keywords" content="[URL="http://meinhotspot.com"]meinhotspot.com[/URL]">
<meta name="Content-type" content="text/html; charset=UTF-8">
<meta name="Content-style-type" content="text/css">
    <script>
        document.getElementsByTagName( 'html' )[0].className += ' js';
        document.getElementsByTagName( 'html' )[0].className =  document.getElementsByTagName( 'html' )[0].className.replace( 'no-js',  '' );
    </script>

    <link href="/img/favicon/MeinHotspot.png" rel="shortcut icon" type="image/vnd.microsoft.icon">
<link href="/img/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon">
<link href="/themes/meinhotspot/css/style.css" media="screen" rel="stylesheet" type="text/css">
            <style type="text/css">
        /**
     * background-color
     */
    html,
    body {
        background-color: #EEEEEE !important;
        color: #344938 !important;
    }

    /*.backgroundimage {*/
        /*display: none !important;*/
    /*}*/

    /**
     * branding color used for buttons etc.
     */
    .richtext a {
        border-bottom-color: #308330;
    }

    .richtext a:hover,
    .richtext a:focus {
        border-bottom-color: #11B711;
    }

    .form-item--terms > p > a {
        border-bottom-color: #308330;
    }

    .form-item--terms > p > a:hover,
    .form-item--terms > p > a:focus {
        border-bottom-color: #11B711;
    }

    .button--primary,
    .form-input--submit {
        background-color: #308330;
    }

    .nav-item--login.current::before {
        background-color: #11B711;
    }

    .box.box--secondary.box--security {
        background-color: #308330;
    }

    .form-input--submit.facebook {
        background-color: #3B5998 !important;
    }

</style>    
    
    </head>

<body class="
    has-image    "
>


<section class="head" role="banner" id="head">
    <div class="shell">

        <h1 class="custom">
            <a href="/de/client/welcome" title="MeinHotspot">
                <img src="/img/mh-logo.png" class="header" title="MeinHotspot" alt="MeinHotspot">
            </a>
        </h1>

        
<nav id="languageToggle" class="languageToggle nav--languages" data-toggle-target="true">

    <a href="#" class="nav-toggle--languages german" data-toggle="true">Deutsch</a>
    <div class="nav-dropdown--languages">

        
            <a href="/de/client/welcome" class="nav-item--languages german">Deutsch</a>
        
            <a href="/en/client/welcome" class="nav-item--languages english">Englisch</a>
        
            <a href="/fr/client/welcome" class="nav-item--languages french">Français</a>
        
            <a href="/cz/client/welcome" class="nav-item--languages czech">Čeština</a>
        
            <a href="/hr/client/welcome" class="nav-item--languages hungarian">Magyar</a>
        
            <a href="/po/client/welcome" class="nav-item--languages polish">Polskie</a>
        
            <a href="/ro/client/welcome" class="nav-item--languages romanian">Român</a>
        
            <a href="/it/client/welcome" class="nav-item--languages italian">Italiano</a>
        
            <a href="/ru/client/welcome" class="nav-item--languages russian">русский язык</a>
        
            <a href="/tr/client/welcome" class="nav-item--languages turkish">Türkçe</a>
            </div>
</nav>
    </div>
</section><!-- /.head -->
<section class="content" role="main" id="content">
    <div class="shell">
        <div class="grid-container">
            
                <div class="main grid-8of12 grid-right">
                    <div class="box box--userinput">
            

                    <div class="userimage has-image ">
    <img src="/img/mh_image.jpg" class="userimage-image">
</div>

<h2>
    Willkommen bei MeinHotspot
</h2>

<div class="box-content richtext">
    MeinHotspot bietet einen Zugang zum Internet an öffentlich  zugänglichen Plätzen wie z.B. Restaurants, Cafes, Bars, Hotels und  vielen anderen Orten an. Mit einem drahtlosen Gerät haben Sie über jeden  MeinHotspot kostenlosen Zugang zum Internet.
</div>
                </div>
                </div>
                                <div class="aside grid-4of12 grid-left">
                    <a href="#login"></a>
                    <div class="box box--secondary" id="login">
    <h3 class="box-title box-title--secondary">
        Kostenloses Internet
    </h3>

    <div class="box-content box-content--secondary richtext">
        <p>
            Mit dem Klick auf &quot;kostenfrei anmelden&quot; akzeptieren Sie die
            <a href="/de/client/policy">Nutzungsbedingungen</a>
        </p>

        <p>
            



    <form name="login" action="[URL]http://192.168.11.1/login[/URL]" method="post" id="registerForFree">
        <input type="hidden" name="dst" value="[URL]http://connect.meinhotspot.com/de/client/redirect[/URL]" />
        <input type="hidden" name="popup" value="true" />
        <input name="username" value="macadresse"  type="hidden" />
        <input value="macadresse" name="password" type="hidden"/>
        <input name="mac" type="hidden" value="macadresse"  />
        <button type="submit" class="form-input form-input--submit">
            kostenfrei anmelden        </button>
    </form>

        </p>
    </div>
</div>
                    
                    <div class="box box--secondary box--security">
                        <h3 class="box-title box-title--secondary">
                            Hier surfen Sie sicher                        </h3>

                        <div class="box-content box-content--secondary">
                            <ul class="checklist checklist--security">
                                <li class="checklist-item">
                                    Virenschutz                                </li>
                                <li class="checklist-item">
                                    Firewall                                </li>
                                <li class="checklist-item">
                                    Geräteschutz                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
                        </div>
    </div>
</section><!-- /.content -->


<section class="footer" id="footer">
    
        <div class="footer--1">
            <div class="shell">
                <p>
                    mit <strong>MeinHotspot</strong> kostenlos und sicher ins Internet. <a href="[URL]http://meinhotspot.com[/URL]" class="button button--footer">mehr erfahren</a>
                </p>
            </div>
        </div>
        <div class="footer--2">
        <div class="shell">
            <nav class="nav--footer">
                
                    <a href="[URL]http://meinhotspot.com[/URL]" class="nav-item--footer">
                        Über MeinHotspot                    </a>
                                <a href="/de/client/policy"  class="nav-item--footer">
                    Nutzungsbedingungen                </a>

                <a href="/de/client/privacy"  class="nav-item--footer">
                    Datenschutz                </a>

                <a href="/de/client/imprint"  class="nav-item--footer">
                    Impressum                </a>

            </nav>
        </div>
    </div>
</section><!-- /.footer -->


    <img src="/img/mh_image.jpg" class="backgroundimage">



<script type="text/javascript" src="/[URL="http://themes/meinhotspot/js/critical.min.js"]themes/meinhotspot/js/critical.min.js[/URL]"></script>
<script type="text/javascript" src="/[URL="http://js/jquery-2.2.0.min.js"]js/jquery-2.2.0.min.js[/URL]"></script>
<script type="text/javascript">
    //<!--
    jQuery.noConflict();
    //-->
</script>
<script type="text/javascript" src="/[URL="http://js/mootools.js"]js/mootools.js[/URL]"></script>
<script type="text/javascript" src="/[URL="http://js/compressed-js.js"]js/compressed-js.js[/URL]"></script><script type="text/javascript">
    //<!--
            if( ![URL="http://Modernizr.mq%28"]Modernizr.mq([/URL] Globals.get( 'mediaQuery' ) ) && location.hash !== '' ) {
            setTimeout( function() {
                location.hash = '';
                window.scrollTop = 0;
            }, 1 );
        }
    
    //-->
</script>
<script type="text/javascript">
    //<!--
    window.addEvent('keydown', function(oEvent) {

    if (oEvent.key == 'e' && (true == oEvent.meta || true == oEvent.control)) {

        reloadCss();
    }
});

function reloadCss() {

    document.getElements('link').each(function(el) {

        if(el.get('rel').toLowerCase().indexOf('stylesheet') >= 0 && null !== el.get('href')) {
    
            var href = el.get('href').replace(/(&|%5C?)forceReload=\d+/, '');
            el.set('href', href + ((href.indexOf('?') >= 0) ? '&' : '?' ) + 'forceReload=' + (new Date().valueOf()));
        }
    });
};

    //-->
</script></body>
</html>

Hat jemand eine Idee wie ich die Fritz!Box damit beauftragen kann das Formular automatisch abzuschicken? (leider post und kein get...)
 
(leider post und kein get...)
Die Frage treibt mich zwar seit knapp einer Woche schon um, ich traute mich aber bisher nicht, da mal nachzufragen ... was macht das eigentlich genau für einen Unterschied?

Erstens kann man ja auch problemlos selbst einen POST-Request erzeugen ... die Wege gehen von "curl" über die GNU-Version für "wget" bis zu "low level" mittels "nc", wie es z.B. juis_check macht.

Zweitens gibt es genug Web-Applikationen, wo ohnehin die Parameter aus POST- und GET-Requests zusammengeworfen werden und im Anschluß "einheitlich" verarbeitet werden können. Solange so ein Formular also keinen speziellen "Content-Type" verwendet (wie es z.B. beim Upload von Dateien der Fall wäre), gibt es gute Chancen, daß man auch einen passenden GET-Request erzeugen kann ... das ist dann eine Frage des Versuchs. Wenn das tatsächlich nicht funktioniert, kann man sich immer noch weitere Gedanken machen und ggf. wieder auf "erstens" zurückkommen.

Ohne Zugriff auf eine solche "meinhotspot.com"-Installation wird man das aber ohnehin kaum testen können ... zumindest sieht es nicht so aus, als würden dort dynamische Inhalte der Anmeldeseite berücksichtigt (Cookies oder Nonce-Values oder Captchas); das sollte es wirklich simpel machen, die Status-Seite regelmäßig aufzurufen, dort die verbleibende Zeit auszulesen und dann entweder das Login-Formular schon vor Ablauf der Zeit noch einmal aufzurufen (wenn das machbar ist, dafür braucht man auch wieder den Zugriff auf so einen Node, um das zu testen) oder sich per "crontab" einen Job zu generieren, der das in der Minute nach dem Ablauf der alten Verbindungszeit automatisch erledigt.

Irgendwie sehe ich das Problem nicht so richtig ... das Ekligste dürfte der Test so einer Lösung sein, wenn man immer die zwei Stunden bis zum Ablauf einer Sitzung warten muß oder will.
 
Manueller Logout zum testen

Das testen lässt sich vereinfachen:unter http://192.168.11.1/logout (in neuren Versionen login.meinhotspot.com/logout) kann der Logout manuell erfolgen.Das Force-Disconnect ist leider nötig, da sonst einige Nutzer munter Ihre Torrent-Clients laufen lassen. Ggf. kann man aber auch über eine Erhöhung des Zeitfensters nachdenken.Wir sind da sehr an Nutzermeinungen interesisert. Was wäre Ihrer Meinung nach denn noch akzeptabel?Max Pohl / MeinHotspot
 
Wie wäre es den Datenverkehr der User nicht zu manipulieren?
 
Die Frage treibt mich zwar seit knapp einer Woche schon um, ich traute mich aber bisher nicht, da mal nachzufragen ... was macht das eigentlich genau für einen Unterschied?

[…]

Irgendwie sehe ich das Problem nicht so richtig ... das Ekligste dürfte der Test so einer Lösung sein, wenn man immer die zwei Stunden bis zum Ablauf einer Sitzung warten muß oder will.
Wie ja „meinhotspot“ schon geschrieben hat, kann man sich ausloggen.
Kannte und habe dafür immer http://192.168.11.1/logout genutzt.
In der Regel liegen nämlich 200Kbits an, manchmal geht es auch kurzzeitig auf 500Kbit/s an und wenn man dann ein Telefon Backup vom heimischen Nas mit 1,5GB Dateien (TWRP Backup) rüber ziehen muss, dann muss man das schon genauer timen, damit genau innerhalb der 2Stunden der Download auch fertig war…

Also Logout, Login und dann rsync nochmal anstoßen XD.
Hatte schon überlegt erstmal nen Greasemonkey Skript zu schreiben, aber wäre schon schön, wenn die Fritz!Box das könnte...
Sitze nämlich seit Montag daran mein Backup aus der Heimat rüber zu schaufeln... -__-


@ob POST und GET ist eigentlich egal:

Ich habe von der ganzen CURL Geschichte leider wenig Ahnung, aber das denke bzw. dachte ich mir dabei:
Bei GET kann könnte man ja einfach einmal ein logout initiieren und dann einfach einen http Befehl absetzen:
http://192.168.11.1/login?dst="http://connect.meinhotspot.com/de/client/redirect"&popup="true"&username="macadresse"&macadresse="password"&mac="macadresse"
(Quick and Dirty, ohne kontrolliert zu haben wie es tatsächlich müsste^^)
Das so zu übergeben kommt dann beim Server als
$_POST['dst']=http://connect.meinhotspot.com/de/client/redirect an.
Bei Get kommt es als $_GET an. Das heißt den URL Befehl von oben kann man bei $_GET nicht absetzen.
Aber wie gesagt, habe davon wenig Ahnung, bin aber am überlegen mich damit rum zu schlagen, weil ich mit der derzeitigen Situation noch mindestens einen Monat zurecht kommen muss…

Wollte deswegen erstmal hier fragen, weil es dafür vielleicht schon Lösungen gibt oder ich Tipps bekomme, wie ich, als jemand der eigentlich nur html, php, und shell- und batchskripte halbwegs kann, die Sache am besten angehen sollte...

Das testen lässt sich vereinfachen:unter http://192.168.11.1/logout (in neuren Versionen login.meinhotspot.com/logout) kann der Logout manuell erfolgen.Das Force-Disconnect ist leider nötig, da sonst einige Nutzer munter Ihre Torrent-Clients laufen lassen. Ggf. kann man aber auch über eine Erhöhung des Zeitfensters nachdenken.Wir sind da sehr an Nutzermeinungen interesisert. Was wäre Ihrer Meinung nach denn noch akzeptabel?Max Pohl / MeinHotspot
Also mal abgesehen, dass Echtzeitanwendungen wie VOIP oder Online-Gaming über ihren Hotspot eine Qual ist. Wäre es schon schön, wenn das Teil eine längere Nacht übersehen könnte, damit z.B. Telefoniefunktionen aufrecht erhalten werden könnte.
-> 14 Stunden.

Die Konkurrenz, z.B. Telekom schaltet übrigens erst nach 24 Stunden ab.

Am schönsten wäre natürlich wenn nicht alle in Sippenhaft genommen werden würden.
Einmal anmelden und fertig und sollte derjenige auffälligen Traffic* hat, dann fängt das System an genau diesen Nutzer nach und nach ein LogIn Formular vor zu setzen.

*auffälliger Traffic:
Kann man z.B. von den genutzten Ports abhängig machen, also 21, 80, 1194, 8080, 443 ist ok und beim Rest wird geschaut wie viel wird über diesen Port übertragen und wenn eine Schwelle mehrfach gerissen wird, wird er ausgeloggt.
Aber selbst das finde ich grenzwertig, da z.B. selbst Torrents nicht unbedingt illegal sein müssen ;)
 
Zuletzt bearbeitet:
@JokerGermany:
Unter PHP (ich nehme mal an, daß Du darauf hinaus wolltest mit $_GET und $_POST) gäbe es aber auch noch eine automatische globale Variable namens $_REQUEST, die dann eben genau den Inhalt von $_GET und $_POST (und $_COOKIE) aggregiert. Wenn das wirklich PHP-Seiten sein sollten bei meinhotspot.com (erste Annahme), dann wäre die zweite Unbekannte eben immer noch, über welche dieser globalen (assoziativen) Array-Variablen der Programmierer dort nun genau auf die Werte aus dem Request zugreift. Macht er das eben über $_REQUEST, gibt es gar keinen Unterschied ... das ist genau das, was ich unter "zweitens" beschrieben habe. Wobei diese "einheitlichen Wege" des Zugriffs auf solche Variablen (egal ob die nun per POST- oder per GET-Request gesetzt wurden) auch in anderen Umgebungen als PHP machbar sind und häufig genug von irgendwelchen Frameworks auch entsprechend implementiert werden.

Es braucht auch - wie bereits geschrieben - kein "curl" (das ist ja ein Client für HTTP (und andere Protokolle) und keine Programmierumgebung oder gar ein Server), um einen POST-Request zu erzeugen (so denn wirklich einer vonnöten wäre) ... das geht auch anders und hat zumindest den Vorteil, daß man sich nicht noch erst ein passendes "curl" (zusammen mit den passenden Libs bzw. als statisch gelinktes Binary, was dann (wegen des großen Funktionsumfangs) auch wieder eine recht erhebliche Größe aufweist) für die FRITZ!Box besorgen muß ... so ein simpler POST-Request ist mit ein paar Zeilen Text in einer HTTP-Verbindung erledigt (noch mal: ein Beispiel wäre juis_check, das setzt sogar einen SOAP-Request per POST ab - weil es eben nur den einen braucht und eigentlich vom Inhalt - von SOAP bis XML - gar keine Ahnung hat).
 
Danke, werde mir mal juis-Check anschauen

- - - Aktualisiert - - -

(in neuren Versionen login.meinhotspot.com/logout) kann der Logout manuell erfolgen.

login.meinhotspot.com existiert nicht ;)

@juis-Check:
Das wird harte Arbeit für mich da durch zu steigen, hut ab vor deinen shell Kenntnissen...

- - - Aktualisiert - - -

So, ich hab mal was zusammengefuscht:

Code:
#! /bin/sh
minute=`wget -q -O- 192.168.11.1 | grep "s</td" | sed 's/<[^>]*>//g' | sed 's/\t//g' | cut -f2 -d"h" | cut -f1 -d"m"`
#echo $minute
if [ $minute -lt 10 ]
then
echo "weniger als 10 Minuten"
wget -qO- 192.168.11.1/logout &>/dev/null
else
echo "mehr als 10 Minuten"
fi

Jetzt fehlt noch das schwierigste, der login^^

Was sollte am besten passieren, wenn es bis zum disconnect noch länger als 10 Minuten sind?

- - - Aktualisiert - - -

@PeterPawn:
Mein nc Befehl funktioniert nicht, kannst du mir helfen?

Heute gab es auch nen paar Änderungen bei mir im Netzwerk.
Das mein Netz ist jetzt nen anderes, als dass des status Servers und login.meinhotspot.com/status bzw logout funktioniert jetzt.

Wenn ich mich mit Firefox einlogge gebe ich folgenden Header weiter:
Code:
POST /login HTTP/1.1 
Host: login.meinhotspot.com 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate, br 
Referer: https://connect.meinhotspot.com/en/client/welcome 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 183
dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%XXXX%XXXX%XXXX%XXXX%XXXX&password=XX%XXXX%XXXX%XXXX%XXXX%XXXX&mac=XX%XXXX%XXXX%XXXX%XXXX%XXXX

Das was ich gebastelt habe:
Code:
#!/bin/sh
BODY="dst=http%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&&username=XX%XXXX%XXXX%XXXX%XXXX%XXXX&password=XX%XXXX%XXXX%XXXX%XXXX%XXXX&mac=XX%XXXX%XXXX%XXXX%XXXX%XXXX"
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 182\r\n\r\n\${BODY}" | nc -i 1 login.meinhotspot.com 80

Die Webseite ist auf einmal https verschlüsselt, muss ich also über den Port 443 gehen?

Wenn ich über Port 80 gehe:
Code:
HTTP/1.0 503 unknown method
Connection: close
Content-Length: 119
Date: Fri, 10 Mar 2017 17:01:34 GMT
Expires: 0

<html>
<head><title>Error 503: unknown method</title></head>
<body>
<h1>Error 503: unknown method</h1>
</body>
</html>

Wenn ich über Port 443 gehe, bekomme ich keine Antwort...
Aber ich glaube da muss ich dann anders rangehen, oder? ist TLS 1.2
 
Zuletzt bearbeitet:
@JokerGermany:
Lies Dir mal einfach noch einmal das von Dir Geschriebene durch und versuche bitte, Dich in meine Lage zu versetzen.

Ich verstehe überhaupt nicht, was Du da gerade veranstaltest ... für die "CODE"-Boxen fehlt irgendwie jeder Kontext (für jemanden, der den Beitrag nicht geschrieben hat), was das eigentlich sein soll bzw. was da gerade passiert.

Warum und was bei Deinem "nc" da nicht funktionieren soll (Ist es das aus der BusyBox oder ein gesondertes? Was geht denn genau nicht, d.h. welche Fehlermeldung erhältst Du?), kann ich auch nicht einfach erraten.

Wenn da jetzt tatsächlich TLS verwendet wird (Wie kommt das von einem Tag auf den anderen?), dann brauchst Du entweder ein passendes Binary als Wrapper (die Möglichkeiten gehen von "OpenSSL" mit "s_client"-Funktion bis "stunnel") oder Du nimmst dann doch gleich ein passend übersetztes "curl", das kann TLS von Hause aus.
 
@JokerGermany:
Warum und was bei Deinem "nc" da nicht funktionieren soll (Ist es das aus der BusyBox oder ein gesondertes? Was geht denn genau nicht, d.h. welche Fehlermeldung erhältst Du?), kann ich auch nicht einfach erraten.
Der Skript läuft momentan unter unter Ubuntu Mate 16.04 im Terminal eingegeben.
Also erstmal nur der Login.

Das ist das Skript, dass ich ausführe:
Code:
#!/bin/sh BODY="dst=http%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&&username=XX%XXXX%XXXX%XXXX%XXXX%XXXX&password=XX%XXXX%XXXX%XXXX%XXXX%XXXX&mac=XX%XXXX%XXXX%XXXX%XXXX%XXXX"
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 182\r\n\r\n\${BODY}" | nc -i 1 login.meinhotspot.com 80
Ich habe den Anmeldevorgang mit dem Firefox auch mit dem Addon Live HTTP Header mitgeschnitten:
Code:
POST /login HTTP/1.1 
Host: login.meinhotspot.com 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate, br 
Referer: https://connect.meinhotspot.com/en/client/welcome 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 183
dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%XXXX%XXXX%XXXX%XXXX%XXXX&password=XX%XXXX%XXXX%XXXX%XXXX%XXXX&mac=XX%XXXX%XXXX%XXXX%XXXX%XXXX


Die letzte Zeile habe ich in das oben genannte Skript übernommen.

Wenn ich das Skript, wie im Quellcode zu sehen über Port 80 ausführe, sehe ich im Terminal folgende Rückmeldung:
Code:
HTTP/1.0 503 unknown method
Connection: close
Content-Length: 119
Date: Fri, 10 Mar 2017 17:01:34 GMT
Expires: 0

<html>
<head><title>Error 503: unknown method</title></head>
<body>
<h1>Error 503: unknown method</h1>
</body>
</html>
Diese Meldung hatte ich gestern schon, als es noch nicht http verschlüsselt war.

Hoffe jetzt verständlicher.

Wenn da jetzt tatsächlich TLS verwendet wird (Wie kommt das von einem Tag auf den anderen?), dann brauchst Du entweder ein passendes Binary als Wrapper (die Möglichkeiten gehen von "OpenSSL" mit "s_client"-Funktion bis "stunnel") oder Du nimmst dann doch gleich ein passend übersetztes "curl", das kann TLS von Hause aus.
Tja, frag das mal Max...
Gestern stand da z.B. statt
Code:
dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect
da noch
Code:
dst=http%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect
Also doch Curl nutzen? -__-
Ich dreh durch, gerade dachte ich, dass ich kurz vorm Ziel wäre...
 
Zuletzt bearbeitet:
Das dürfte schon an der Stelle falsch werden, wo die Variablenzuweisung für BODY in derselben Zeile steht wie das SheBang (1. CODE-Kasten in #9) ... das ist ein Kommentar, damit wird der Rest der Zeile ignoriert. Im Ergebnis dürfte die "Content-Length" für den POST-Request nicht stimmen und wenn dann gar kein Body im Request zu finden ist (obwohl für den eine Länge von 182 Zeichen angesagt wird), wäre ich als Server auch sauer.

Von dem doppelten Trennzeichen (Ampersand) in den Parametern ganz zu schweigen (zwischen "popup" und "username"), womit dann die "errechnete" Länge des Bodies (ich nehme mal an, daß Du da einfach zu faul zum automatischen Berechnen warst und einfach das "s" in "https" abgezogen hast) auch wieder nicht mehr stimmt und damit das letzte Zeichen der MAC-Adresse auch wieder fehlt, usw, usf. - irgendwie versuchst Du, es Dir extrem leicht zu machen.

Wenn ich geschrieben habe, daß es einfach ist, meinte ich damit das Prinzip, wie man solche Requests "low level" ausführen kann ... von "mit ohne Aufwand" habe ich sicherlich nichts geschrieben und - sei nicht sauer - die gezeigten zwei Zeilen Shell-Skript sind schon als "Versuch" eher ein Abtörner.

Woher Du das Gefühl beziehst, kurz vor dem Erfolg zu stehen, kann ich aber auch nicht nachvollziehen ... wenn ich das richtig verstehe, hast Du bisher außer der Abfrage der verbleibenden Connection-Zeit noch gar nichts erreicht.
 
Das dürfte schon an der Stelle falsch werden, wo die Variablenzuweisung für BODY in derselben Zeile steht wie das SheBang (1. CODE-Kasten in #9) ... das ist ein Kommentar, damit wird der Rest der Zeile ignoriert.
Das ist im eigentlichen Skript separiert^^

[/quote]
Von dem doppelten Trennzeichen (Ampersand) in den Parametern ganz zu schweigen (zwischen "popup" und "username"), womit dann die "errechnete" Länge des Bodies (ich nehme mal an, daß Du da einfach zu faul zum automatischen Berechnen warst und einfach das "s" in "https" abgezogen hast) auch wieder nicht mehr stimmt und damit das letzte Zeichen der MAC-Adresse auch wieder fehlt, usw, usf.[/quote]

Das ist im Skript auch nicht doppelt oO, die Länge habe ich aus dem Header den Firefox gesendet hat übernommen.

Code:
#!/bin/sh
BODY="dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%XXXX%XXXX%XXXX%XXXX%XXXX&password=XX%XXXX%XXXX%XXXX%XXXX%XXXX&mac=XX%XXXX%XXXX%XXXX%XXXX%XXXX"
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 183\r\n\r\n${BODY}" | nc -i 1 login.meinhotspot.com 80
Woher Du das Gefühl beziehst, kurz vor dem Erfolg zu stehen, kann ich aber auch nicht nachvollziehen ... wenn ich das richtig verstehe, hast Du bisher außer der Abfrage der verbleibenden Connection-Zeit noch gar nichts erreicht.
Ich bin froh überhaupt so weit gekommen zu sein XD
Hatte angenommen, da sind vielleicht noch kleine Fehler im netcat script...

Du machst mir echt Hoffnung...^^
 
Zuletzt bearbeitet:
Jetzt setzt Du den "dst"-Parameter wieder auf "https"?

Ich blicke einfach nicht mehr durch, was Du nun eigentlich erreichen willst ...

Das geht schon bei der Frage los, warum Du bei der MAC-Adresse auch unbedingt noch das "%3A" (das ist nichts weiter als ein Doppelpunkt in URL-Encoding) "maskieren" mußt und das gilt auch zumindest für die ersten drei Stellen der MAC-Adresse. Anhand der OID kann Dich garantiert niemand "erkennen".

Wenn Du an die Stelle der fest kodierten Zahl bei "Content-Length" einfach die tatsächliche Länge der Variablen $BODY setzt, hast Du auch schon ein weiteres Problem weniger - ich würde fast darauf wetten, daß die Länge hier nicht wirklich mit dem zugewiesenen Wert übereinstimmt. Außerdem kannst Du ja in "juis_check" problemlos sehen, wie man zumindest mal überprüfen kann, was man da eigentlich sendet ... Du schickst offenbar irgendwelche Daten los (von denen Du gar nicht genau weißt, wie die aufgebaut sind) und versuchst dann anhand irgendwelcher "Antworten" seitens des Servers die Ursache für ein Problem aus dem Kaffeesatz zu lesen.

Hast Du eine Vorstellung, wofür der Parameter "-i 1" beim "nc" gut ist? Warum verwendest Du den hier überhaupt? Ich hatte den Parameter zwar früher auch mal benutzt, ihn dann aber auch recht schnell wieder zu den Akten gelegt ... was gibt es hier denn für einen Grund, zwischen den einzelnen Zeilen (das geht ja schon mit dem Request-Header los und ergibt hier schon mal eine "Verzögerung" von mind. 6 Sekunden vom Start der Verbindung bis zur kompletten Übermittlung des POST-Requests) jeweils eine Sekunde zu warten?

So, wie Du das (nach dem, was ich bisher zu lesen bekam) betreibst, wird das eher nichts werden ... ich habe mich auch nicht einfach hingesetzt und das "juis_check" niedergeschrieben und dann versucht zu "erraten", was da vielleicht schiefgehen könnte. Da gehört ein Packet-Dump der tatsächlich gesendeten Daten genauso dazu wie das (automatische) Vermeiden allzu simpler Fehler, wie es z.B. eine "falsch vorhergesagte Länge" des Request-Bodies wäre.

Du kannst ja noch nicht einmal sicher sein, ob das von Dir Gesendete am Ende tatsächlich mit dem übereinstimmt, was Du da mit irgendeinem Firefox-AddOn (warum eigentlich nicht direkt mit den Developer-Tools des Firefox?) ermittelt hast.

Ich finde z.B. einen HTTP-1.1-Request "gewöhnungsbedürftig", in dem der "Connection"-Header fehlt und wo der Server damit gar nicht weiß, wie er mit der Verbindung umgehen soll (er antwortet auch mit einer HTTP-1.0-Fehlermeldung, wenn das bisher gezeigte stimmt und schließt dann wohl selbst die Verbindung), nachdem der erste Request verarbeitet wurde.

Aber das ist alles auch nur geraten und ich komme eigentlich immer mehr zu der Annahme, daß es für Dich vielleicht doch kein gangbarer Weg ist, das selbst zu lösen ... wenn Du das wirklich in Angriff nehmen willst, mußt Du Dir (nach meinem Eindruck und der kann sich nun einmal nur aus dem speisen, was Du hier schreibst) vermutlich etwas mehr Mühe geben.
 
Jetzt setzt Du den "dst"-Parameter wieder auf "https"?
Ich dachte, da es eine Weiterleitung ist, ist es sowieso egal. Habe die Zeilen aus dem FireFox Request genutzt.

Wenn Du an die Stelle der fest kodierten Zahl bei "Content-Length" einfach die tatsächliche Länge der Variablen $BODY setzt, hast Du auch schon ein weiteres Problem weniger - ich würde fast darauf wetten, daß die Länge hier nicht wirklich mit dem zugewiesenen Wert übereinstimmt.
Code:
#!/bin/sh
BODY="dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX"
BODY_LEN=$( echo -n ${BODY} | wc -c )
echo $BODY_LEN
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nConnection: keep-alive\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ${BODY_LEN}\r\n\${BODY}" | nc -i 5 login.meinhotspot.com 80
=>
Code:
183
HTTP/1.0 503 unknown method
Connection: close
Content-Length: 119
Date: Fri, 10 Mar 2017 21:10:15 GMT
Expires: 0

<html>
<head><title>Error 503: unknown method</title></head>
<body>
<h1>Error 503: unknown method</h1>
</body>
</html>
Du hast die Wette verloren...

Außerdem kannst Du ja in "juis_check" problemlos sehen, wie man zumindest mal überprüfen kann, was man da eigentlich sendet ...
Du kannst das vielleicht, ich blicke aber nicht durch juis_check durch...

Hast Du eine Vorstellung, wofür der Parameter "-i 1" beim "nc" gut ist? Warum verwendest Du den hier überhaupt?
Ich habe mit und ohne rumprobiert, ich habe im Internet gelesen, dass er sonst angeblich nicht auf eine Antwort wartet...

Du kannst ja noch nicht einmal sicher sein, ob das von Dir Gesendete am Ende tatsächlich mit dem übereinstimmt, was Du da mit irgendeinem Firefox-AddOn (warum eigentlich nicht direkt mit den Developer-Tools des Firefox?) ermittelt hast.
Weil ich es nicht besser weiß...

Ich finde z.B. einen HTTP-1.1-Request "gewöhnungsbedürftig", in dem der "Connection"-Header fehlt und wo der Server damit gar nicht weiß, wie er mit der Verbindung umgehen soll (er antwortet auch mit einer HTTP-1.0-Fehlermeldung, wenn das bisher gezeigte stimmt und schließt dann wohl selbst die Verbindung), nachdem der erste Request verarbeitet wurde.
Hatte ein HTTP-1.0 Post Vorlage genommen und gehofft es funktioniert so, habe nun aber mal den kompletten Header (laut "irgendeinem Firefox-Addon") genommen.

wenn Du das wirklich in Angriff nehmen willst, mußt Du Dir (nach meinem Eindruck und der kann sich nun einmal nur aus dem speisen, was Du hier schreibst) vermutlich etwas mehr Mühe geben.
Vielleicht macht das ganze auch einfach keinen Sinn, weil Mühe ist für einen Laien etwas anderes als für jemanden, der sich damit auskennt.

Aber ich hab sowieso noch nen anderen HTTP POST gesehen, von daher ist das Problem vielleicht sowieso anderer Natur.
Das einzig positive momentan ist, dass er auch, wenn man Cookies ablehnt funktioniert, denn in diesem Request schiebt er eigentlich nen Cookie unter...
Code:
https://login.meinhotspot.com/login 
 
POST /login HTTP/1.1 
Host: login.meinhotspot.com 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate, br 
Referer: https://connect.meinhotspot.com/en/client/redirect 
DNT: 1 
Connection: keep-alive 
Upgrade-Insecure-Requests: 1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 383 
dst=http%3A%2F%2Fmeinhotspot.com%2Fportalseiteos2%2F%3Fmeta%3DeyJsb2NhdGlvbl9pZCI6MTk5MCwiY3VzdG9tZXJfaWQiOjE2NzAsInByby1wYWtldCI6dHJ1ZSwicGx6IjoiMjA1MzciLCJjb3VudHJ5IjoiREUiLCJjbGllbnRfaWQiOjI3NzgyMDksImxvY2FsLWluZm8iOmZhbHNlLCJyYXRpbmctbW9kdWwiOmZhbHNlfQ%253D%253D&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX

HTTP/1.1 200 OK 
Cache-Control: no-cache 
Connection: close 
Content-Length: 2007 
Content-Type: text/html 
Date: Fri, 10 Mar 2017 21:23:14 GMT 
Expires: 0
 
Sorry, die Länge des Wertes einer Variablen ermittelt man (eigentlich in jeder POSIX-kompatiblen Shell) mit "${#variable}" - eine Ausgabe mittels "echo" kann (nicht muß) bereits die Länge der resultierenden Zeichenkette verändern. Wenn ich die Länge des Bodies in "juis_check" mittels "stat" ermittele, liegt das auch daran, daß ich eben nicht mittels "echo" die Daten in eine Pipe schicke, sondern sie zuvor in einer (temporären) Datei ablege, deren Größe ermittele und dann auch genau diese Datei mittels "cat" in die Pipe kopiere.

Das Problem des frühzeitigen Schließens der TCP-Verbindung (weil "nc" bei EOF auf STDIN nicht weiter wartet, sofern es nicht mind. eine von zwei passenden Optionen kennt) kann man auch mit passenden FIFOs umgehen ... genau das passiert ja in "juis_check". Solange niemand den mit STDIN des "nc"-Kommandos verbundenen FIFO schließt, wartet das "nc"-Kommando auf weitere Daten von dort und empfängt in der Zwischenzeit problemlos die Daten von der Gegenseite und gibt sie auf STDOUT aus. Wenn dort ebenfalls ein FIFO verwendet wird und man die Daten z.B. mittels "read" ausliest, kann man auch den Zeitpunkt ermitteln, wann die Gegenseite ihrerseits die Verbindung beendet hat (dann schlägt das "read" fehl) bzw. man kann auch die Absicht in dieser Richtung (die "Connection: close"-Zeile in der Antwort) schon frühzeitig erkennen. Trotzdem weiß man eben noch anhand des "Content-Length"-Headers der Antwort, wieviele Daten man noch erwarten darf, bevor die Verbindung geschlossen wird.

Ich bleibe weiterhin dabei, daß da der Aufbau des Requests nicht stimmt ... gerade bei HTTP/1.1 ist es eben essentiell, daß die angegebene "Content-Length" 100%iig stimmt - es gibt keine andere Möglichkeit, einen Request vom nächsten in derselben Verbindung (das ist ja bei HTTP/1.1 möglich) sauber abzugrenzen. Wenn das wirklich funktioniert, muß der Server ja an irgendeinem anderen Merkmal erkennen, daß der Request anders aufgebaut ist (und er deshalb mit dem 503-Fehler um die Ecke kommen muß) ... bevor man so etwas auf das wirklich Notwendige zusammenstreicht, muß man dann eben mit einer 1:1-Kopie beginnen und Stück für Stück ermitteln, welche Header der Server halt braucht und welche nicht.

Abgesehen davon muß man eben den Netzwerk-Mitschnitt des Browser-Requests und den des "nc"-Requests miteinander vergleichen, wenn man den Unterschied feststellen will ... nur auf den Text zu starren, bringt nicht wirklich viel. Außerdem könnte man dann wenigsten mal die komplette Konversation sehen ... bisher bist Du ja extrem geizig mit solchen Daten. Daher braucht man auch schon fast eine Lupe, damit man den überzähligen Backslash vor dem Dollarzeichen am Ende des letzten "echo"-Kommandos findet ... das führt nun mal dazu, daß anstelle des Inhalts von ${BODY} die Zeichenkette "${BODY}" im Request landet. Wenn das auch wieder nur ein "Kopierfehler" ist (wie die beiden anderen zuvor), dann gebe ich es allerdings auf, mir Deine Skripte anzusehen. Das macht dann nämlich keinen Spaß mehr ... eigentlich zeigt aber jeder Editor mit Syntax-Highlighting bereits solche Probleme an und ein Mitschnitt des Netzwerkverkehrs bzw. die Anzeige der tatsächlich gesendeten Daten (etwas in der Richtung habe ich in #12 ja bereits geschrieben) hätte das ebenfalls sofort sichtbar machen müssen.


-Bei der neuen Verwendung von "-i 5" dauert es ja sogar mind. 30 Sekunden, bis dieser einzelne Request (der besteht immerhin aus mind. 6 Zeilen und das sind jeweils 5 Sekunden Pause zwischen diesen Zeilen, was man mit "-i 5" erhält) endlich beim Server eingetroffen ist. Das ist doch ziemlicher Unsinn ...

Ja, es ist nicht so simpel, eine "nc"-Instanz bei EOF auf STDIN zur Fortsetzung der Arbeit zu überreden, wenn diese die Option "-d" oder "-q" nicht kennt ... aber es ist möglich und allemal schlauer, als zwischen jeder Zeile eine Pause von 5 Sekunden einzuschieben. Ein "empfindlicher" Server sieht das schon als DoS-Angriff, wenn so ein simpler Request 30 Sekunden braucht, bis er halbwegs komplett übertragen wurde.

Solange es nicht gute Gründe für die Verwendung von HTTP/1.1 gibt, kann man sich durch die Verwendung von HTTP/1.0 auch einiges an Ärger ersparen ... ich dachte, das wäre bereits vorher deutlich geworden. Der Ansatz mit "Connection: Close" geht zwar auch, aber Du machst ja das genaue Gegenteil. Du teilst dem Server mit, daß sich Dein Client mit den Besonderheiten von HTTP/1.1 auskennen würde und daß er gerne mehr als einen Request in derselben Verbindung ausführen würde (Connection: keep-alive) ... ich habe keine Idee, warum (und vor allem wie) Du das machen willst, wenn Du nicht einmal FIFOs verwendest und schon arge Probleme hast, die "nc"-Instanz so lange am Leben zu erhalten (nach EOF auf STDIN), daß die überhaupt noch etwas empfangen kann.
 
Sorry, die Länge des Wertes einer Variablen ermittelt man (eigentlich in jeder POSIX-kompatiblen Shell) mit "${#variable}" - eine Ausgabe mittels "echo" kann (nicht muß) bereits die Länge der resultierenden Zeichenkette verändern. Wenn ich die Länge des Bodies in "juis_check" mittels "stat" ermittele, liegt das auch daran, daß ich eben nicht mittels "echo" die Daten in eine Pipe schicke, sondern sie zuvor in einer (temporären) Datei ablege, deren Größe ermittele und dann auch genau diese Datei mittels "cat" in die Pipe kopiere.
done
Das Problem des frühzeitigen Schließens der TCP-Verbindung (weil "nc" bei EOF auf STDIN nicht weiter wartet, sofern es nicht mind. eine von zwei passenden Optionen kennt) kann man auch mit passenden FIFOs umgehen ... genau das passiert ja in "juis_check". Solange niemand den mit STDIN des "nc"-Kommandos verbundenen FIFO schließt, wartet das "nc"-Kommando auf weitere Daten von dort und empfängt in der Zwischenzeit problemlos die Daten von der Gegenseite und gibt sie auf STDOUT aus. Wenn dort ebenfalls ein FIFO verwendet wird und man die Daten z.B. mittels "read" ausliest, kann man auch den Zeitpunkt ermitteln, wann die Gegenseite ihrerseits die Verbindung beendet hat (dann schlägt das "read" fehl) bzw. man kann auch die Absicht in dieser Richtung (die "Connection: close"-Zeile in der Antwort) schon frühzeitig erkennen. Trotzdem weiß man eben noch anhand des "Content-Length"-Headers der Antwort, wieviele Daten man noch erwarten darf, bevor die Verbindung geschlossen wird.
Bahnhof^^

Abgesehen davon muß man eben den Netzwerk-Mitschnitt des Browser-Requests und den des "nc"-Requests miteinander vergleichen, wenn man den Unterschied feststellen will ... nur auf den Text zu starren, bringt nicht wirklich viel. Außerdem könnte man dann wenigsten mal die komplette Konversation sehen ... bisher bist Du ja extrem geizig mit solchen Daten.
Sag was du brauchst und ich liefere es, du meinst also mit wireshark den Netzwerkverkehr mitschneiden?

Daher braucht man auch schon fast eine Lupe, damit man den überzähligen Backslash vor dem Dollarzeichen am Ende des letzten "echo"-Kommandos findet ... das führt nun mal dazu, daß anstelle des Inhalts von ${BODY} die Zeichenkette "${BODY}" im Request landet. Wenn das auch wieder nur ein "Kopierfehler" ist (wie die beiden anderen zuvor), dann gebe ich es allerdings auf, mir Deine Skripte anzusehen.
Nein, der Fehler existierte tatsächlich...

Solange es nicht gute Gründe für die Verwendung von HTTP/1.1 gibt, kann man sich durch die Verwendung von HTTP/1.0 auch einiges an Ärger ersparen ... ich dachte, das wäre bereits vorher deutlich geworden. Der Ansatz mit "Connection: Close" geht zwar auch, aber Du machst ja das genaue Gegenteil. Du teilst dem Server mit, daß sich Dein Client mit den Besonderheiten von HTTP/1.1 auskennen würde und daß er gerne mehr als einen Request in derselben Verbindung ausführen würde (Connection: keep-alive) ... ich habe keine Idee, warum (und vor allem wie)
Weil ich nicht genau weiß, was der Server erwartet und keine Ahnung habe?^^

Code:
#!/bin/sh
BODY="dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX"
BODY_LEN=$( echo -n ${BODY} | wc -c )
echo $BODY_LEN
echo ${#BODY}
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate, br\r\nReferer: https://connect.meinhotspot.com/en/client/welcome\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ${#BODY}\r\n${BODY}" | nc login.meinhotspot.com 80
=>
Code:
183
183
HTTP/1.0 503 unknown method
Connection: close
Content-Length: 119
Date: Sat, 11 Mar 2017 11:09:09 GMT
Expires: 0

<html>
<head><title>Error 503: unknown method</title></head>
<body>
<h1>Error 503: unknown method</h1>
</body>
</html>
 
Hast Du jemals selbst nachgesehen, was Du da eigentlich sendest?

Ich will gar keinen Wireshark-Mitschnitt sehen, wenn Du den nicht selbst zumindest als "interessant" erachtest. Ich habe auch nicht den Ehrgeiz, das auf die Reihe zu kriegen und wollte eigentlich nur mit Hinweisen helfen, wenn Du nicht weiterkommen solltest.

Wenn Du Dir hier einfach einmal ansiehst, was Du da "verbrochen" hast, dann findest Du sicherlich auch den weiterhin bestehenden Fehler - der ist mir zuvor auch nicht aufgefallen, weil eben "${BODY}" gar nicht ersetzt wurde und damit ohnehin der Request schon an dieser Stelle falsch und der wirklich resultierende Text gar nicht zu sehen war.

Dein derzeitiges Problem liegt an dieser Stelle begründet:

https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.1

Schau Dir die BNF-Notation für einen Request an, vergleiche das mit dem, was Du dort zu senden versuchst und Du findest den Unterschied (BTW: juis_check macht das ebenfalls richtig).
 
Wenn Du Dir hier einfach einmal ansiehst, was Du da "verbrochen" hast, dann findest Du sicherlich auch den weiterhin bestehenden Fehler - der ist mir zuvor auch nicht aufgefallen, weil eben "${BODY}" gar nicht ersetzt wurde und damit ohnehin der Request schon an dieser Stelle falsch und der wirklich resultierende Text gar nicht zu sehen war.

Wieso sollte ${BODY} nicht ersetzt haben?

Was mir aufgefallen ist, dass er die echo Parameter, warum auch immer, mit in den Request packt.
Code:
#!/bin/sh
BODY="dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX"
BODY_LEN=$( echo -n ${BODY} | wc -c )
echo $BODY_LEN
echo ${#BODY}
echo "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate, br\r\nReferer: https://connect.meinhotspot.com/en/client/welcome\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ${#BODY}\r\n${BODY}" |  nc login.meinhotspot.com 80
=>
Code:
183
183
HTTP/1.0 400 Bad Request
Connection: close
Content-Length: 113
Date: Sat, 11 Mar 2017 16:23:22 GMT
Expires: 0

<html>
<head><title>Error 400: Bad Request</title></head>
<body>
<h1>Error 400: Bad Request</h1>
</body>
</html>
 
Wieso sollte ${BODY} nicht ersetzt haben?
Ich schrieb, daß "${BODY}" bisher nicht ersetzt wurde ... das war solange der Fall, wie das Dollarzeichen am Beginn dieses Namens durch den zusätzlichen Backslash "maskiert" wurde (BTW: Damit hatte ich meine Wette dann eben doch gewonnen - zumindest bzgl. der Differenz zwischen "Content-Length" und dem tatsächlich gesendeten Body).

Was mir aufgefallen ist, dass er die echo Parameter, warum auch immer, mit in den Request packt.
:gruebel:

Keine Ahnung, was Du damit sagen willst ... die zwei Zeilen mit "183" sind ja selbstverschuldet (und auch nur in der Konsolenausgabe zu sehen und nicht Bestandteil des Requests); so etwas kann ich als "trace" ja noch nachvollziehen, wenngleich es ja auch einmal gereicht hätte und nachdem Du nun auch weißt, daß bei Dir "$BODY_LEN" und "${#BODY}" identisch sind, könnte ja der ganze Teil mit $BODY_LEN auch komplett raus - er wird ja nicht mehr verwendet.

Da der Fehler vermutlich in Deinem komischen AddOn gar nicht richtig zu sehen ist, habe ich auch auf die HTTP-Spezifikation verwiesen und nicht geschrieben, daß Du die Ausgabe des AddOns (von der ich mal annehme, daß Du sie tatsächlich 1:1 hier hineinkopiert hast, aber ich kenne das AddOn nicht) mit Deinem Zeug vergleichen sollst.

Den Fehler würdest Du vermutlich nur in einem echten Mitschnitt über Wireshark sehen - aber anhand der verlinkten BNF-Notation (und des Textes rundherum) ist er mehr als deutlich zu erkennen. Du mußt eben nur mal überlegen, was Du da wirklich sendest ... wenn Du das nicht sofort in die Pipe zum "nc" stecken würdest, könnte man das ja problemlos auch irgendwo anders ausgeben (von solchen Sachen wie "tee" mal gänzlich zu schweigen) und sich "ansehen".
 
Im Terminal tritt das nicht auf, aber wenn man es als Skript laufen lässt passiert folgendes:
Aus dem hier:
Code:
echo -ne "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate, br\r\nReferer: https://connect.meinhotspot.com/en/client/welcome\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ${#BODY}\r\n${BODY}"
wird:
Code:
-ne POST /login HTTP/1.1
Host: login.meinhotspot.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://connect.meinhotspot.com/en/client/welcome
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 183
dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX

deswegen ohne -ne
 
So,
dank https://forum.ubuntuusers.de/topic/nc-spoof-http-header/ , funktioniert jetzt auch der Login.
Code:
#!/bin/sh
BODY="dst=https%3A%2F%2Fconnect.meinhotspot.com%2Fde%2Fclient%2Fredirect&popup=true&username=XX%3AXX%3AXX%3AXX%3AXX%3AXX&password=XX%3AXX%3AXX%3AXX%3AXX%3AXX&mac=XX%3AXX%3AXX%3AXX%3AXX%3AXX"
BODY_LEN=$( echo -n ${BODY} | wc -c )
echo $BODY_LEN
echo ${#BODY}
echo "POST /login HTTP/1.1\r\nHost: login.meinhotspot.com\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate, br\r\nReferer: https://connect.meinhotspot.com/en/client/welcome\r\nConnection: Close\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ${#BODY}\r\n\r\n${BODY}" | nc login.meinhotspot.com 80
->
Code:
183
183
HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Content-Length: 1425
Content-Type: text/html
Date: Mon, 13 Mar 2017 17:34:53 GMT
Expires: 0

<html>
<head>
<title>MeinHotspot > redirect</title>
<meta http-equiv="refresh" content="2; url=https://connect.meinhotspot.com/de/client/redirect">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
<style type="text/css">
<!--
textarea,input,select {
    background-color: #FDFBFB;
    border: 1px #BBBBBB solid;
    padding: 2px;
    margin: 1px;
    font-size: 14px;
    color: #808080;
}

body{ color: #737373; font-size: 12px; font-family: verdana; }

a, a:link, a:visited, a:active { color: #AAAAAA; text-decoration: none; font-size: 12px; }
a:hover { border-bottom: 1px dotted #c1c1c1; color: #AAAAAA; }
img {border: none;}
td { font-size: 12px; color: #7A7A7A; }

-->
</style>
<script language="JavaScript">
<!--
    function startClock() {
    location.href = 'https://connect.meinhotspot.com/de/client/redirect';
    }
//-->
</script>
</head>
<body onLoad="startClock()">
<table width="100%" height="100%">
<tr>
    <td align="center" valign="middle">
    <img src="img/logo.png" alt="MeinHotspot" title="MeinHotspot"/>
    <br><br>
    Sie wurden soeben auf dem Hotspot eingeloggt und werden weitergeleitet.
    <br><br>
    <img src="img/load.gif" alt="Lade" title="Lade"/>
    <br><br>
    Falls keine Weiterleitung stattfindet bitte <a href="https://connect.meinhotspot.com/de/client/redirect">hier klicken</a></td>
</tr>
</table>
</body>
</html>
Wie implementiere ich die jetzt am besten in die Fritz!Box und was muss ich beachten?
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.