Webseite auslesen



  • Also hier im Forum schaffe ichs nicht mich einzuloggen.
    Header sieht so aus:

    "POST /forum/login-var-.html HTTP/1.1\r\n"
    "Host: c-plusplus.net\r\n"
    "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
    "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n"
    "Cache-Control: no\r\n"
    "Accept-Language: de,en;q=0.7,en-us;q=0.3\r\n"
    "Referer: http://web-sniffer.net/\r\n"
    "Content-type: application/x-www-form-urlencoded\r\n"
    "Content-length: 33\r\n"
    "Connection: close\r\n\r\n"
    "login=Login&password=xxxxxx&username=sqwan\r\n

    Hier kriege ich immer die antwort, dass man nutzername oder mein PW falsch ist.
    Ich weiß aber, dass es richtig ist.

    Auf einer anderen Seite habe ich es glaube ich geschafft mich erfolgreich auf der webseite einzuloggen. Als antwort vom Webserver bekomme ich:

    HTTP/1.1 302 Found
    Date: Sun, 10 Aug 2008 09:24:21 GMT
    Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11
    X-Powered-By: PHP/5.2.0-8+etch11
    Set-Cookie: PHPSESSID=ac0d6677115c0931486117abef8ceca2; path=/
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Location: game.php?a=login
    Vary: Accept-Encoding
    Content-Length: 0
    Connection: close
    Content-Type: text/html; charset=ISO-8859-1

    nun habe ich versucht die seite start.php mit einer GET anfrage auszulesen.
    Jedoch kriege ich auf meine anfrage keine antwort. Meine Anfrage sieht so aus:

    "GET /game.php HTTP/1.1\r\n"
    "Host: iliath.kampf-um-mittelerde.de\r\n"
    "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n"
    "Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7\r\n"
    "Cache-Control: no\r\n"
    "Accept-Language: de,en;q=0.7,en-us;q=0.3\r\n"
    "Referer: http://web-sniffer.net/\r\n"
    "Content-type: application/x-www-form-urlencoded\r\n"
    "Content-length: 33\r\n"
    "Connection: close\r\n\r\n"
    "a=login\r\n"

    Hierdrauf bekomme ich jedoch keine antwort. Kann ich denn über einen socket oder so nur eine Anfrage senden? Oder nur einmal empfangen? Glaube ich iwie nicht dran. Aber woran liegt es sonnst?

    Wenn ich das direkt anfrage ohne mich einzuloggen gehts auch...



  • sqwan schrieb:

    Kann ich denn über einen socket oder so nur eine Anfrage senden? Oder nur einmal empfangen? Glaube ich iwie nicht dran. Aber woran liegt es sonnst?

    Naja - du wirst getrennt, wenn du fertig empfangen hast und musst vor jedem Senden also die Verbindung wieder neu herstellen... (http ist ein zustandsloses protokoll)

    also:

    [verbinden]
    >> GET bla bla login&bla...
    << HTTP blabla
    [disc]
    [neu verbinden]
    >> GET bla bla login&bla...
    << HTTP blabla
    [disc]
    [neu verbinden]
    >> GET bla bla login&bla...
    << HTTP blabla
    

    usw...

    Ich würde übrigens die Zeile mit "Referer: ..." weglassen - die brauchst du nicht, so weit ich das jz richtig verstanden habe...

    Ich bin mir jetzt nicht ganz sicher, aber das sieht falsch aus:

    [...]
    "Content-length: 33\r\n" 
    [...]
    "login=Login&password=xxxxxx&username=sqwan\r\n
    

    Also:

    • login=.... ist selbst ohne pwd länger als die 33 zeichen... (37 + pwd-länge + "\r\n"-länge (sollte insg. 2 sein)
    • kein plan, ob der Zeilenumbruch am Ende sein muss / darf / soll / ...

    So was würde dir sicherlich nicht passieren, wenn du ne ordentliche Funktion (oder Klasse) hättest, die dir diese Header bastelt!

    bb



  • das ist richtig, eine headerfunktion/Klasse wäre nicht schlecht.
    Dafür muss ich ertmal soweit mit headern klar kommen um daraus eine zu machen.
    Danach werde ich das auch machen...
    Weil dann habe ich zu viele header...

    Aber wenn ich immer wieder neu verbinde, bin ich dann noch eingeloggt?
    Ich probiers gleich mal. Die frage ist dann nur woher ich weiß, ob das ergebnis richtig ist, wenn ich es nicht kenne...



  • Klar... Du bekommst doch auch gaaaaaaaaaaaaaanz viel datenmüll...
    durch das >> HTTP bla bla wollte ich das mal andeuten...

    bb



  • Also erst mal habe ich mir eine Klasse für die header gemacht...

    #include <iostream>
    #include <string.h>
    
    class make_header
    {
    	private:
    	string header;
    	string host;
    	string http_v;
    
    	public:
    	//----------GET_CREATED_HEADER----------//
    	string get_created_header()
    	{
    		return header;
    	}
    	//----------SET_HOST-------------------//
    	void set_host(string h)
    	{
    		host = h;
    	}
    	//----------SET_HTTP_VERSION-----------//
    	void set_http_v(string version)
    	{
    		http_v = version;
    	}
    	//----------CREATE_GET_HEADER--------------//
    	string create_get(string datei)
    	{
    		header=	"GET /"+datei+" HTTP/"+http_v+"\r\n"
    				"Host: "+host+"\r\n"
    				"Connection: Close\r\n\r\n";
    		return header;
    	}
    	//----------CREATE_POST_HEADER---------//
    	string create_post(string datei, string content)
    	{
    		header=	"POST/"+datei+" HTTP/"+http_v+"\r\n"
    				"Host: "+host+"\r\n"
    				"Content-type: application/x-www-form_urlencoded\r\n"
    				"Content-length: "+strlen(content)+"\r\n"
    				"Connection: Close\r\n\r\n"
    				+content+"\r\n";
    		return header;
    	}
    }
    

    wenn ich die jetzt mit #include "make_header.c" includen möchte gibts ne menge fehler... Kann ich die so nicht includen, oder ist meine klasse falsch?



  • Bei so einer detaillierten Fehlermeldung tipp ich mal auf folgendes:
    a) string.h ist schon einmal nicht (mehr) standardkonform
    b) std:: vor cout/endl etc
    c) std:: vor string
    d) was für Fehlermeldungen?!



  • Also das fängt schon nach dem include an.

    Compiler: Default compiler
    Führt gcc.exe... aus
    gcc.exe "G:\C++\make_header.c" -o "G:\C++\make_header.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -lws2_32
    G:\C++\make_header.c:1:20: iostream: No such file or directory

    G:\C++\make_header.c:4: error: syntax error before "make_header"
    G:\C++\make_header.c:5: error: syntax error before '{' token

    G:\C++\make_header.c:8: warning: data definition has no type or storage class
    G:\C++\make_header.c:9: error: syntax error before "http_v"
    G:\C++\make_header.c:9: warning: data definition has no type or storage class
    G:\C++\make_header.c:11: error: syntax error before ':' token
    G:\C++\make_header.c:18: error: syntax error before "h"
    G:\C++\make_header.c: In function set\_host': G:\\C++\\make_header.c:20: error:h' undeclared (first use in this function)
    G:\C++\make_header.c:20: error: (Each undeclared identifier is reported only once
    G:\C++\make_header.c:20: error: for each function it appears in.)
    G:\C++\make_header.c: At top level:
    G:\C++\make_header.c:23: error: syntax error before "version"
    G:\C++\make_header.c: In function set\_http_v': G:\\C++\\make_header.c:25: error:version' undeclared (first use in this function)
    G:\C++\make_header.c: At top level:
    G:\C++\make_header.c:28: error: syntax error before "create_get"
    G:\C++\make_header.c:28: error: syntax error before "datei"
    G:\C++\make_header.c: In function create\_get': G:\\C++\\make_header.c:30: error:header' undeclared (first use in this function)
    G:\C++\make_header.c:30: error: datei' undeclared (first use in this function) G:\\C++\\make_header.c: At top level: G:\\C++\\make\_header.c:36: error: syntax error before "create\_post" G:\\C++\\make_header.c:36: error: syntax error before "datei" G:\\C++\\make\_header.c: In functioncreate_post':
    G:\C++\make_header.c:38: error: header' undeclared (first use in this function) G:\\C++\\make_header.c:38: error:datei' undeclared (first use in this function)
    G:\C++\make_header.c:41: error: content' undeclared (first use in this function) G:\\C++\\make_header.c: At top level: G:\\C++\\make_header.c:46: error: syntax error before '}' token G:\\C++\\make_header.c: In functionmain':
    G:\C++\make_header.c:53: error: cout' undeclared (first use in this function) G:\\C++\\make_header.c:53: error:endl' undeclared (first use in this function)
    G:\C++\make_header.c:49: warning: return type of 'main' is not `int'

    Ausführung beendet



  • Nimm einfach mal den C++-Compiler g++, nicht den C-Compiler...

    (EDIT: Wenn das die IDE selbst macht, nimm einfach mal die C++-Dateiendung .cpp, nicht die C-Dateiendung)



  • Ohhhhhhhhhhhhkay...

    Erst einmal ist die Endung eines Header .h oder .hh oder von mir aus auch .H oder sowas. Und dann kompiliert man keine Header. Man inkludiert sie.

    Und wenn er iostream nicht findet dann hast du entweder eine fehlerhafte Installation oder einen alten Compiler.



  • also.... ich habe nun 2 klassen... eine für die header
    eine für die connection...

    leider kann ich beide klassen aber nicht kombinieren, denn die funktionen in der connection klasse können keine strings sondern nur char* verarbeiten...

    So sehen die betroffenen funktionen aus:

    int set_host(char * host){
            if( SOCKET_ERROR == generate_ip(host,&addr) ){
                c_out("Hostname konnte nicht aufgeloest werden!");
                return 1;
            }else{
                c_out("Hostname in IP aufgeloest!");
                return 0;
            }
        }
        int recive(char * header)
        {
            string recvs="";
            long rc;
            char recv_buf[66000];
    
            send(s,header,strlen(header),0);
    
            int i = 0;
    
            while((rc=recv(s,recv_buf,66000,0))>0)
            {
                //recvs=recvs+recv_buf;
                cout<<recv_buf<<endl;
            }
            return 0;
        }
    

    nun frage ich mich, welchen sinn es macht strings zu verwenden, wenn die funktionen sie eh nicht verwerten können, und ob es vllt andere funktionen gibt.
    grade die recive funktion ist da sehr wichtig. denn wenn ich den header eh immer von hand bauen muss, kann ich mir meine headerklasse spaaren...

    Was bzw wie kann ich daran gehen, dass da was gescheites bei rumkommt....
    Ein lauffähiges bsp habe ich hier:
    http://sqwan.su.funpic.de/C++/connection.cpp
    http://sqwan.su.funpic.de/C++/main.cpp
    http://sqwan.su.funpic.de/C++/versuch.cpp

    MFG Sqwan



  • Wie wäre es, wenn du dir zuerst einmal ein C++ Tutorial oder gar ein Buch zu Gemüte führst? 🙄



  • da habe ich das her...
    Tja... weiter gebracht hat mich dein Tipp auch nicht...


Anmelden zum Antworten