Curl & Login

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Curl & Login

    Hallo

    Ich versuche gerade mich über CURL in ein Spiel einzuloggen, also im Prinzip ist es ja ganz einfach

    PHP-Code:
    <td width='30%' align='left'><font class='hint'>Username</font><br>
    <
    input id='nameInput' name='name' type='text' style='width:100%'/></td>
        <
    td width='30%' align='left' style='border-right:0px'><font class='hint'>Passwort</font><br>
    <
    input name='passwd' type='password' style='width:100%'/></td>
        <
    td width='10%' align='center' style='border-left:0px'><font class='hint'>&nbsp;</font><br>
    <
    input name='login' value='Login' type='submit' style='width:100%'/></td
    Das ist das "Loginfeld"

    und ich hab dieses Script dazu geschrieben:

    PHP-Code:
    <?php
    $curl 
    curl_init();
    curl_setopt($curlCURLOPT_HEADER0);
    curl_setopt($curlCURLOPT_POSTtrue);
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($curlCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($curlCURLOPT_FOLLOWLOCATION1);
    curl_setopt($curlCURLOPT_COOKIEFILE"cookiefile");
    curl_setopt($curlCURLOPT_COOKIEJAR"cookiefile");
    curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/index.php");
    curl_setopt($curlCURLOPT_POSTFIELDS"name=Benutzername&passwd=geheim");
    $result curl_exec($curl); // run the whole process
    curl_close($curl);
    echo 
    $result;
    ?>
    ich hatte vorherr noch ein Fehler bekommen wo ich
    CURLOPT_FOLLOWLOCATION, false) auf 1 hatte.

    Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/www-data/htdocs/p/peoplesaw/www/uni1/admin/test.php on line 7
    Aber es funktioniert auch wenn ich das auf 0 stelle nicht.

    Einer ahnung warum die Felder nicht ausgefüllt werden ?
    Zuletzt geändert von JamesCarter; 23.06.2008, 10:57.

  • #2
    1. Bitte brich deinen Code gemäß Forumsregeln um.
    2. Ich sehe kein Input mit dem Namen nameInput. Das Passwortfeld heißt passwd.
    3. Du postest den Submitbutton nicht mit. Kann klappen, muss aber nicht.

    Kommentar


    • #3
      1. erledigt
      2. erledigt
      3. versucht

      Das Problem wenn ich das Script ausführe ist ja in den Feldern nichts drin, oder ist das beabsichtigt ?

      Kommentar


      • #4
        Dein Problem ist eher fehlendes Verständnis dafür, was du da eigentlich machst. Mit cURL baust du einen POST Request zusammen und schickst ihn ab. Du simulierst also das, was passiert wenn du das Formular im Browser öffnest, ausfüllst und abschickst. Bei diesem Abschicken generiert dein Browser aus den Formulardaten einen POST Request und genau diesen gilt es mit cURL nachzubauen.
        Dazu kann es hilfreich sein, den vom Browser generierten Request mal anzusehen. Für Firefox gibt es Extensions, z.B. HTTPLiveHeaders, die das möglich machen.
        Du wirst sehen, dass der Request an die URL geschickt wird, die im Action Parameter des Formulars steht. Machst du das mit cURL auch so?
        Ferner wirst du sehen, wie die POST-Daten aussehen, nämlich ähnlich wie ein GET Parameterstring, also Feldname=Feldwert&Feldname2=Feldwert2 - und zwar für alle Felder, die nicht disabled sind. (Das sieht man mit HTTPLiveHeaders afaik nicht so, aber du kannst es in der HTTP Spezifikation nachlesen.)
        Als Antwort auf den cURL Request erhält dein Script natürlich genau die selbe Antwort wie dein Browser, i.d.R. die Seite auf der man nach dem Anmelden landet. Dein Script erhält als Antwort wieder das Loginformular. Du bist also nicht angemeldet, was bedeutet, dass du den Request nicht korrekt simuliert hast oder die Logindaten schlicht falsch sind.

        Btw: Manche Loginformulare schützen sich vor allzu einfältigen Simulanten, indem sie den User Agent String prüfen. Wenn es partout nicht funktionieren will, solltest du dahingehend testen.
        Zuletzt geändert von onemorenerd; 23.06.2008, 11:42.

        Kommentar


        • #5
          So danke für die Einführung in cURL ich hab mir das Addon für FF installiert und nen bisschen rumgespielt.

          PHP-Code:
          <?php
          $curl 
          curl_init();
          curl_setopt($curlCURLOPT_HEADER0);
          curl_setopt($curlCURLOPT_POST1);
          curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
          curl_setopt($curlCURLOPT_USERAGENT"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
          curl_setopt($curlCURLOPT_FOLLOWLOCATION0);
          curl_setopt($curlCURLOPT_COOKIEFILE"cookiefile");
          curl_setopt($curlCURLOPT_COOKIEJAR"cookiefile");
          curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/index.php");
          curl_setopt($curlCURLOPT_POSTFIELDS"universe=2_1&name=JamesCarter&passwd=xxxxxx&login=Login");
          $result curl_exec($curl); // run the whole process
          curl_close($curl);
          echo 
          $result;
          ?>
          soweit bin ich nun, allerdings lande ich wieder auf der Startseite.
          Kann es sein weil das "Followlocation" nicht funkioniert das es deswegen nicht geht ?


          POST /login.php universe=2_1&name=JamesCarter&passwd=xxxx&login=Login
          POST /settings.php?PHPSESSID=993d2ce97165cea1b2795a80661b1e64&get rndval=1214215166442
          POST /init_data.php?PHPSESSID=993d2ce97165cea1b2795a80661b1e64&buildings rndval=1214215166559
          POST /init_data.php?PHPSESSID=993d2ce97165cea1b2795a80661b1e64&sciences rndval=1214215166737
          POST /notes.php?PHPSESSID=993d2ce97165cea1b2795a80661b1e64 rndval=1214215166852
          vielleicht liegts daran das da eine PHPSESSID erzeugt wird und er die abfragt ?


          edit: mir werden über meine HP auch keine Bilder und CO angezeigt auf der Seite (vll auch ne Fehlerquelle?)
          Zuletzt geändert von JamesCarter; 23.06.2008, 12:08.

          Kommentar


          • #6
            Dachte ich mir schon: Das Formularziel ist login.php, den cURL Request schickst du aber an index.php. Korrigiere das mal, dann sehen wir weiter.

            Übrigens solltest du keine Session IDs in Foren posten. Das kann ins Auge gehen.

            Kommentar


            • #7
              Ich danke für deine Hilfe bisjetzt. Ich bin eingeloggt und hänge nun an den Login Screen, mein Firefox sagt mir das

              PHP-Code:
              POST /settings.php?PHPSESSID=ID&get rndval=1214215513783
              POST 
              /init_data.php?PHPSESSID=ID&buildings rndval=1214215513902
              POST 
              /init_data.php?PHPSESSID=ID&sciences rndval=1214215514016
              POST 
              /notes.php?PHPSESSID=IDrndval=1214215514124
              POST 
              /contacts.php?PHPSESSID=IDrndval=1214215514211
              POST 
              /alliance.php?PHPSESSID=ID&get=244 rndval=1214215514300
              POST 
              /init_data.php?PHPSESSID=ID&mods rndval=1214215514441
              POST 
              /blueprints.php?PHPSESSID=ID&get&user_id=1214&details rndval=1214215514717
              POST 
              /init_data.php?PHPSESSID=ID&skills rndval=1214215514897
              POST 
              /planets.php?PHPSESSID=IDrndval=1214215514998
              POST 
              /main.php?PHPSESSID=IDrndval=1214215515360
              POST 
              /fleet_control.html rndval=1214215516332
              POST 
              /fleets.php?all&battles&new_msg&PHPSESSID=IDrndval=1214215516515 
              Requesten muss, ich nun die 2 zeilen, an was geschickt werden soll, und was geschickt werden soll, an die entsprechenden dateien schicken ? bzw muss ich nun erstmal schauen wie ich die PHPSESSID aus meiner VAR gelesen krieg

              BTW: was ist das ? rndval=1214215514717
              ?

              Kommentar


              • #8
                Requesten muss, ich nun die 2 zeilen, an was geschickt werden soll, und was geschickt werden soll, an die entsprechenden dateien schicken ?
                Waaas?

                zw muss ich nun erstmal schauen wie ich die PHPSESSID aus meiner VAR gelesen krieg
                Wenn die nicht im Cookie gespeichert wird, ja.

                BTW: was ist das ? rndval=1214215514717
                Jedenfalls nichts PHP-typisches. Das solltest du also besser wissen.

                Kommentar


                • #9
                  Sag mal, bist Du nicht Dizzle aus dem Thread von gestern Abend?

                  Kommentar


                  • #10
                    OffTopic:
                    Sag mal, bist Du nicht Dizzle aus dem Thread von gestern Abend?
                    Glaub ich nicht. Der wäre über Nacht nichtmal so weit gekommen.

                    Kommentar


                    • #11
                      das was ich meinte wo du Was gefragt hast:

                      PHP-Code:
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/settings.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&get");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/init_data.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&buildings");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/init_data.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&sciences");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/notes.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/contacts.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/alliance.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&get=$allyid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/init_data.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&mods");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/blueprints.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid&skills");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/init_data.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/planets.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/main.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"PHPSESSID=$sid");
                      curl_setopt($curlCURLOPT_URL"http://s77.nlserver.net/fleets.php");
                      curl_setopt($curlCURLOPT_POSTFIELDS"all&battles&new_msg&PHPSESSID=ID"); 
                      so muss ich das nun machen oder ? jeder Datei die bei mir im FF drin stand, das entsprechende zu schicken

                      Kommentar


                      • #12
                        so muss ich das nun machen oder ?
                        Nee, warum sollte es sinnvoll sein, parameter immer wieder zu überschreiben?

                        Kommentar


                        • #13
                          Vielleicht gibst du erstmal preis, was dein Endziel ist. Was möchtest du eigentlich erreichen? Loggst dich ja sicher nicht nur zum Spass ein.

                          Wenn du nur eine bestimmte Aktion ausführen willst, z.B. einen Klick simulieren oder Werte aus einer Seite lesen, musst du nicht unbedingt den kompletten Weg, den du im Browser zurücklegst, mit PHP nachbauen. Mit dem erfolgreichen Einloggen bekommst du deine SID und mit dieser solltest du direkt die gewünschte Aktion ausführen können. Die ganzen Requests, die dein Browser zwischendrin noch macht, müssen nicht unbedingt simuliert werden.

                          Kommentar


                          • #14
                            Ich versuche gerade aus meiner Variable die SID rauszukriegen.
                            Mein Ziel ist eigentlich nur das ich die planets.php aufrufen kann und somit meine eigenen Planeten auslesen kann

                            Kommentar


                            • #15
                              Dann rufe auch nur die planets.php auf. Den Rest kannst du dir sparen.

                              Kommentar

                              Lädt...
                              X