seite aufrufen ohne browser



  • Ich habe jetzt mal einiges durchprobiert und diese methode mit den Sockets hatte ich schon versucht, und jetzt bin ich dahintergekommen dass es mit zb: www.google.de perfekt funktioniert.
    Nur wenn ich als URL

    http://*******@yahoo.de:**@dynupdate.no-ip.com/nic/update?hostname=.no-ip.biz&myip=1.2.3.4

    angebe kommt immer diese Meldung:
    Projekt1.exe hat ein Problem festgestellt und muss beendet werden.
    (sowie di nur nicht mit IE http://www.stupidedia.org/images/thumb/f/f2/Iehepfumbw.PNG/400px-Iehepfumbw.PNG)

    wenn es nötig ist poste ich auch gerne den ganzen source, ich versteh einfach nicht was ich da falsch mache


  • Administrator

    Und wie sollen wir dir helfen? Ich kann leider nicht hellsehen.
    Code auf das nötigste reduzieren und zeigen. Zudem noch bekanntgeben, auf welcher Platform du arbeitest, denn mit Standard C++ hat das nicht zu tun und ein Mod sollte dich entsprechend verschieben.

    Grüssli



  • Ok, Ich arbeite mit Dev C++ auf Windows XP Sp2.

    Ich verwende den Code von hier:
    http://www.final4ever.com/showthread.php?t=192153

    und zwar exact diesen code. Die Parameter setze ich so

    argc = 3;
        argv[1]="http://******@yahoo.de:*******@dynupdate.no-ip.com/nic/update?hostname=*******.no-ip.biz&myip=1.2.3.4 ";
        argv[2]="100";
    

    Das frustrierende:
    argv[1]="www.google.de";

    und alles funktioniert perfekt, nur mit meiner adresse scheint es nicht zu wollen



  • Sieht fast so aus, als ob du da was falsch verstanden hättest ^^
    Zeig mal die Deklaration von argc und argv

    bb



  • Ok also eigentlich sind dass ja die Parameter die ich ans Programm übergebe also an main. Aber der Einfachheit halber hier der ganze Code:

    #include <windows.h>
    #include <winsock2.h>
    #include <iostream>
    
    BOOL InitConnection(SOCKET *wSock, char *SERV);
    BOOL InitWSA();
    BOOL InitSocket(SOCKET *wSock);
    DWORD WINAPI RecvData(LPVOID* wSock);
    
    int main(int argc, char** argv)
    {
        argc = 3;
        argv[1]="http://******@yahoo.de:*******@dynupdate.no-ip.com/nic/update?hostname=*******.no-ip.biz&myip=1.2.3.4 ";
        argv[2]="100";
    
        SOCKET tehRock;
        int number = atoi(argv[2]);
        char *site = argv[1];
        char buffert[65000];
    
        for(int i = 0; i < number; i++)
        {
            if(InitConnection((SOCKET*)tehRock, site) == true)
            std::cout << "Connected.\n";
            Sleep(20);
            send(tehRock, "GET / HTTP/1.0\r\n\r\n", 19, 0);
            std::cout << "Sending HTTP GET REQUEST\n";
            while(recv(tehRock, buffert, sizeof(buffert), 0) > 0)
            std::cout << buffert;
        }
    }
    
    DWORD WINAPI RecvData(LPVOID* wSock)
    {
        SOCKET socket = (SOCKET)wSock;
        char data[65356];
        ZeroMemory(&data, sizeof(data));
        std::cout << "Thread successfully created.\n";
        while(1)
        {
            if(recv(socket, data, sizeof(data), 0) > 0)
            std::cout << data;
            Sleep(1);
        }
    }
    
    BOOL InitConnection(SOCKET *wSock, char *SERV)
    {
        int port = 80;
        struct hostent *host;
        struct sockaddr_in sin;
        int error;
    
        host = gethostbyname(SERV);
        memset( &sin, 0, sizeof sin );
        sin.sin_family = AF_INET;
        sin.sin_addr = *((in_addr *)host->h_addr);
        sin.sin_port = htons(port);
        error = connect((SOCKET)wSock, (sockaddr*)&sin, sizeof sin);
    
        if(error != 0)
        return false;
    
        return true;
    }
    
    BOOL InitSocket(SOCKET *wSock)
    {
        *wSock = socket(AF_INET, SOCK_STREAM, 0);
    
        if((SOCKET)wSock == INVALID_SOCKET)
        return false;
    
        return true;
    }
    
    BOOL InitWSA()
    {
        WSADATA wsaData;
        WORD version;
        version = MAKEWORD(2, 2);
    
        int error;
        error = WSAStartup(version, &wsaData);
    
        if(error != 0)
        return false;
    
        if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
        {
            WSACleanup();
            return false;
        }
       system("Pause");
        return true;
    }
    


  • Du kannst nicht einfach user:pass@site.com senden.

    user:pass müssen base64 encoded gesendet werden.

    http://www.ietf.org/rfc/rfc2617.txt

    So geht das:

    GET /members/blah.html HTTP/1.1
    Host: site.com
    Authorization: Basic d2hhdGV2ZXI=
    


  • Das hier ist nicht definiert:

    int main(int argc, char** argv) 
    { 
        argc = 3; 
        argv[1]="http://******@yahoo.de:*******@dynupdate.no-ip.com/nic/update?hostname=*******.no-ip.biz&myip=1.2.3.4 "; 
        argv[2]="100";
    

    Z.Bsp. kann ja argc auch 1 sein und damit argv[1] schon zu nem Speicherzugriffsfehler führen - so wird es auch sein ^^

    int main()
    {
        int number = 100;
        const char *site = "http://********";
        SOCKET tehRock;
        char buffert[65000];
    /*code bleibt unverändert*/
    }
    

    Sieht aber allgemein so aus, als ob es dir schon noch ein wenig an den Grundlagen fehlen würde ^^

    bb

    edit: aber keine Ahnung, ob es dann geht oder wirklich noch was verschlüsselt werden muss... oder noch andere Fehler drin sind...


  • Administrator

    Du gibst das folgende als Server an:
    http://@yahoo.de:@dynupdate.no-ip.com/nic/update?hostname=******.no-ip.biz&myip=1.2.3.4

    Das ist aber kein Servername, sondern eine URL.
    -> Protokoll: http://
    -> Server: dynupdate.no-ip.com
    -> Pfad: /nic/update?hostname=***.no-ip.biz&myip=1.2.3.4

    Zudem muss ***@yahoo.de:***@ extrahiert werden und als Auth Parameter verschlüsselt eingefügt werden.
    Wenn du so wenig Ahnung von HTTP hast, dann solltest du dringend das RFC durchlesen, welches ich dir gezeigt habe. Zudem wäre auch ein vernünftiges Tutorial in Sockets empfehlenswert, bevor du irgendwelchen Code per Copy&Paste übernimmst, welchen du hinten und vorne nicht verstehst.

    Grüssli



  • Ok das hab ich auch mit hilfe von
    http://www.motobit.com/util/base64-decoder-encoder.asp
    ich hab mich jetzt ein bischen in das base64 reingelesen, versteh aber auch nicht wie ich das machen soll.
    ich hab also alles versucht
    dXNlcm5hbWU:cGFzc3dvcmQ@...
    dXNlcm5hbWUcGFzc3dvcmQ@...
    aber es verändert sich nichts. sry für die blöde Frage aber ich blick immer weniger durch


  • Administrator

    NOIP schrieb:

    sry für die blöde Frage aber ich blick immer weniger durch

    Kein Wunder, du schaust überall nur eine Zeile an und erwartest, dass du dann das Wissen von 10 Büchern gelernt hast!
    Mit den Informationen, welche wir dir gegeben haben, brauchst du wohl minimum eine Woche, um dich in die Sache einzuarbeiten. Lies die Links durch, lies die PDFs, lies die Dokumentationen, mach die Tutorials, lern das Zeug.

    Kannst du eigentlich überhaupt C++ programmieren? Denn wenn nicht, empfehle ich aus der Woche ein Jahr zu machen...

    Mach einen Schritt nach dem anderen, setze dir Zwischenziele und schaue, dass du die Lösungen für die Zwischenziele verstehst.
    Du hast in diesem Thread grundsätzlich alle Informationen bekommen, welche du benötigst. Das einzige was du noch tun musst, ist diese Information auch zu lesen.

    Grüssli



  • NOIP schrieb:

    Ich verwende den Code von hier:
    http://www.final4ever.com/showthread.php?t=192153

    Vergiß den code mal ganz schnell - weil er einfach Müll ist.

    http://tangentsoft.net/wskfaq/

    Ansonsten kann ich mich nur Dravere anschließen.


Anmelden zum Antworten