Mit WSA auf google.de zugreifen
-
Das programm bricht jetzt wahrscheinlich das Empfangen ab, aber aus irgendeinem Gund schließt sich das Programm immer, wenn es fertig empfangen hat^^
#include <iostream> #include <windows.h> #include <winsock2.h> #include <string> #include <fstream> using namespace std; int WSAStart() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); } int cstringlen(char array[]) { int counter=0; while (array[counter]!=0) { counter++; } return counter; } void gebaus(char array[]) { for (int i=0;array[i]!=0;i++) { cout << array[i]; } cout << endl; } string getData() { int MAX_LENGTH = 8000; char crlf = 13; char buffer[MAX_LENGTH]; string data; data = "GET / HTTP/1.0\n" "Host: localhost\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n" "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n" "Keep-Alive: 300\n" "Connection: keep-alive\n\n"; return data; } int login() { SOCKET s; if (WSAStart()!=0) { cout << "WSA konnte nicht gestartet werden!" << endl; system("pause"); return -1; } s = socket(AF_INET, SOCK_STREAM, 0); if (s==INVALID_SOCKET) { cout << "Socket konnte nicht ertellt werden!" << endl; system("pause"); return -1; } sockaddr_in addr; memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("74.125.39.99"); long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); if (rc==SOCKET_ERROR) { cout << "Verbindung konnte nicht hergestllet werden!" << endl; system("pause"); return -1; } else { cout << "Verbindung wurde erfolgreich hergestllt!" << endl; } string data = getData(); char buffer[5000]; strcpy(buffer, data.c_str()); rc = send(s, buffer, sizeof(buffer), 0); //senden if (rc==SOCKET_ERROR) { cout << "Fehler beim Senden der Daten!" << endl; system("pause"); return -1; } else { cout << "Daten wurden erfolgreich gesendet!" << endl; } char buffer_recv[5000]; recv(s, buffer_recv, 1000,0); char source[9000]; strcpy(source, buffer_recv); while (rc!=0) { rc = recv(s, buffer_recv, 1,0); strcat(source, buffer_recv); } cout << "Fertig!" << endl; system("pause"); fstream file; file.open("hello.htm"); for (unsigned int i=0;source[i]!=0;i++) { file << source[i]; } file << endl; file.close(); } void stradd(char array1[], char array2[]) { int len1 = cstringlen(array1); int len2 = cstringlen(array2); char ergebnis[len1+len2+1]; strcpy(ergebnis, array1); for (int i=0;array2[i]!=0;i++) { ergebnis[len1+i] = array2[i]; } gebaus(ergebnis); } int main(int argc, char *argv[]) { login(); system("pause"); }mfg
@night@
-
gitb es irgendwo nen Beispiel,wo man mit WSA auf eine Webseite zugreift???
ich würd gern mal nen bisschen spicken
mfg
@night@
-
-
Ich hab ja schon mal mit WSA nen Server und Client programmiert, aber ich hab ja speziell Probleme beim arbeiten mit Webseiten^^
mfg
@night@
-
// Fehlerbehandlung entfernt damit es kürzer ist ^^ #include <iostream> #include <winsock2.h> #include <windows.h> using namespace std; int main() { WSADATA wsa; WSAStartup(MAKEWORD(2,2), &wsa); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("209.85.135.104"); connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); string request = "GET / HTTP/1.0\r\n" "Host: www.google.de\r\n" "\r\n"; send(s, request.c_str(), request.length(), 0); char buffer[4096]; for(;;) { int rc = recv(s, buffer, sizeof(buffer), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } cout.write(buffer, rc); } }
-
Danke

es geht endlich
mfg
@night@
-
ich hab jetzt folgendes Problem:
Aus irgendeinem Grund gibt google mir immer anderen quelltext...
manchmal funktionierts, dann wieder nicht, dann nur zum Teil
#include <iostream> #include <windows.h> #include <winsock2.h> #include <string> #include <fstream> using namespace std; int WSAStart() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); } int cstringlen(char array[]) { int counter=0; while (array[counter]!=0) { counter++; } return counter; } void gebaus(char array[]) { for (int i=0;array[i]!=0;i++) { cout << array[i]; } cout << endl; } string getData() { int MAX_LENGTH = 8000; char crlf = 13; char buffer[MAX_LENGTH]; string data; data = "GET / HTTP/1.0\n" "Host: www.google.de\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n" "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n" "Keep-Alive: 300\n" "Connection: keep-alive\n\n"; return data; } void WSArecv(SOCKET s, char buffer[]) { int rc; for(;;) { rc = recv(s, buffer, sizeof(buffer), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } } // ende for-schleife } int login() { SOCKET s; if (WSAStart()!=0) { cout << "WSA konnte nicht gestartet werden!" << endl; system("pause"); return -1; } s = socket(AF_INET, SOCK_STREAM, 0); if (s==INVALID_SOCKET) { cout << "Socket konnte nicht ertellt werden!" << endl; system("pause"); return -1; } sockaddr_in addr; memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("74.125.77.104"); long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); if (rc==SOCKET_ERROR) { cout << "Verbindung konnte nicht hergestllet werden!" << endl; system("pause"); return -1; } else { cout << "Verbindung wurde erfolgreich hergestllt!" << endl; } string data = getData(); char buffer[5000]; strcpy(buffer, data.c_str()); rc = send(s, buffer, sizeof(buffer), 0); //senden if (rc==SOCKET_ERROR) { cout << "Fehler beim Senden der Daten!" << endl; system("pause"); return -1; } else { cout << "Daten wurden erfolgreich gesendet!" << endl; } char buffer2[5000]; //==================================>Empfangen... for(;;) { rc = recv(s, buffer2, sizeof(buffer2), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } } // ende for-schleife string source = ""; source.assign(buffer2); cout << source << endl; } void stradd(char array1[], char array2[]) { int len1 = cstringlen(array1); int len2 = cstringlen(array2); char ergebnis[len1+len2+1]; strcpy(ergebnis, array1); for (int i=0;array2[i]!=0;i++) { ergebnis[len1+i] = array2[i]; } gebaus(ergebnis); } int main(int argc, char *argv[]) { login(); system("pause"); }
-
Der Teil ist hier auf jeden Fall falsch:
char buffer[5000]; strcpy(buffer, data.c_str()); rc = send(s, buffer, sizeof(buffer), 0); //sendenDenk mal über das sizeof(buffer) nach.
-
void stradd(char array1[], char array2[]) { int len1 = cstringlen(array1); int len2 = cstringlen(array2); char ergebnis[len1+len2+1]; strcpy(ergebnis, array1); for (int i=0;array2[i]!=0;i++) { ergebnis[len1+i] = array2[i]; } gebaus(ergebnis); }Uhhh....das akzeptiert der Compiler? Machs besser nicht.
-
Jo würd ich auch nicht machen, das geht nämlich nur beim g++. (Variable length array).
Verzichte am besten ganz auf die C-Strings wenn du eh die String-Klasse aus C++ nutzt.
-
es funktioniert jetzt schon besser^^
Allerdings kriege ich nicht den gesamten Google-Code...#include <iostream> #include <windows.h> #include <winsock2.h> #include <string> #include <fstream> using namespace std; int WSAStart() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); } int cstringlen(char array[]) { int counter=0; while (array[counter]!=0) { counter++; } return counter; } void gebaus(char array[]) { for (int i=0;array[i]!=0;i++) { cout << array[i]; } cout << endl; } string getData() { int MAX_LENGTH = 8000; char crlf = 13; char buffer[MAX_LENGTH]; string data; data = "GET / HTTP/1.0\n" "Host: www.google.de\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n" "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n" "Keep-Alive: 300\n" "Connection: keep-alive\n\n"; return data; } void WSArecv(SOCKET s, char buffer[]) { int rc; for(;;) { rc = recv(s, buffer, sizeof(buffer), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } } // ende for-schleife } int login() { SOCKET s; if (WSAStart()!=0) { cout << "WSA konnte nicht gestartet werden!" << endl; system("pause"); return -1; } s = socket(AF_INET, SOCK_STREAM, 0); if (s==INVALID_SOCKET) { cout << "Socket konnte nicht ertellt werden!" << endl; system("pause"); return -1; } sockaddr_in addr; memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("74.125.77.104"); 62.146.187.145 long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); if (rc==SOCKET_ERROR) { cout << "Verbindung konnte nicht hergestllet werden!" << endl; system("pause"); return -1; } else { cout << "Verbindung wurde erfolgreich hergestllt!" << endl; } string data = getData(); char buffer[10000]; strcpy(buffer, data.c_str()); int len = rc = send(s, data.c_str(),data.length(), 0); //senden if (rc==SOCKET_ERROR) { cout << "Fehler beim Senden der Daten!" << endl; system("pause"); return -1; } else { cout << "Daten wurden erfolgreich gesendet!" << endl; } char buffer2[5000]; //==================================>Empfangen... for(;;) { rc = recv(s, buffer2, sizeof(buffer2), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } } // ende for-schleife gebaus(buffer2); fstream f; f.open("hello.htm"); for (int i=0;buffer2[i]!=0;i++) { f << buffer2[i]; } f << endl; f.close(); } int main(int argc, char *argv[]) { login(); system("pause"); }mfg
@night@
-
ofstream f("C:/test.html"); for(;;) { rc = recv(s, buffer2, sizeof(buffer2), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } f.write(buffer2, rc); }
-
ich liebe dich @spicker@

es geht endlich
aber warum hat das ganze bei nem freund vonmir funktioniert
mfg
@night@
-
heyho,
bis jetzt funktioniert zwar nicht alles so wie es soll,aber das ist erstmal egal.
Mein größtes Problem wär folgendes:
Wenn ich ein 2. Mal versuche eine Verbindung herzustellen, gibt mir die Funktion connect() nur SOCKET_ERROR zurück, obwohl ich fünf Sekunden davor die Verbindung per closesocket abgebrochen habe.
Gibt es hier eine Art spoiler, damit nicht immer der gesamte Platz auf der Seite eingenommen wird???#include <iostream> #include <windows.h> #include <winsock2.h> #include <string> #include <fstream> #include <sstream> using namespace std; string StringBetween(const string& input, const string& left, const string& right) { size_t posLeft, posRight; posLeft = input.find(left); posRight = input.find(right); if (posLeft == string::npos || posRight == string::npos) { return ""; // Nicht gefunden } posLeft += left.length(); posRight += right.length(); string ergebnis1 = input.substr(posLeft, input.length() - right.length() - left.length()); int formel = (input.find(right) - posLeft); string ergebnis2 = ergebnis1.substr(0, formel); return ergebnis2; } int WSAStart() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); } int cstringlen(char array[]) { int counter=0; while (array[counter]!=0) { counter++; } return counter; } void gebaus(char array[]) { for (int i=0;array[i]!=0;i++) { cout << array[i]; } cout << endl; } string getDataforfirst() { int MAX_LENGTH = 8000; char crlf = 13; char buffer[MAX_LENGTH]; string data; data = "GET / HTTP/1.0\r\n" "Host: www.google.de\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\r\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" "Keep-Alive: 300\r\n" "Connection: keep-alive\r\n\r\n"; return data; } void WSArecv(SOCKET s, char buffer[]) { int rc; for(;;) { rc = recv(s, buffer, sizeof(buffer), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } } // ende for-schleife } int firstcall() { SOCKET s; if (WSAStart()!=0) { cout << "WSA konnte nicht gestartet werden!" << endl; system("pause"); return -1; } s = socket(AF_INET, SOCK_STREAM, 0); if (s==INVALID_SOCKET) { cout << "Socket konnte nicht ertellt werden!" << endl; system("pause"); return -1; } sockaddr_in addr; memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("74.125.77.104"); long rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); if (rc==SOCKET_ERROR) { cout << "Verbindung konnte nicht hergestllet werden!" << endl; system("pause"); return -1; } else { cout << "Verbindung wurde erfolgreich hergestllt!" << endl; } string data = getDataforfirst(); char buffer[10000]; strcpy(buffer, data.c_str()); rc = send(s, data.c_str(),data.length(), 0); //senden if (rc==SOCKET_ERROR) { cout << "Fehler beim Senden der Daten!" << endl; system("pause"); return -1; } else { cout << "Daten wurden erfolgreich gesendet!" << endl; } char buffer2[5000]; //==================================>Empfangen... /* ofstream f("C:/test.html"); for(;;) { gebaus(buffer2); rc = recv(s, buffer2, sizeof(buffer2), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } f.write(buffer2, rc); } */ string source; do { gebaus(buffer2); rc = recv(s, buffer2, sizeof(buffer2), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } source.assign(buffer2); } while (!source.find("</script>")); do { rc = recv(s, buffer2, sizeof(buffer2), 0); } while (!rc||rc==-1); closesocket(s); string img = StringBetween(source, "<img>", "</img>"); cout << "imagename=" << img << endl; //==================================================================>>>> ssid erfolgreich abgezogen data = "GET / HTTP/1.0\r\n" "Host: www.google.de\n" "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16 (.NET CLR 3.5.30729)\r\n" "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n" "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" "Keep-Alive: 300\r\n" "Connection: keep-alive\r\n\r\n"; Sleep(5000); rc = connect(s, (SOCKADDR*)&addr, sizeof(sockaddr)); if (rc==SOCKET_ERROR) { cout << "Fehler beim 2.Verbinden" << endl; system("pause"); return -1; } rc = send(s, data.c_str(), data.length(), 0); if (rc==SOCKET_ERROR) { cout << "Fehler beim Einloggen mir SSID" << endl; system("pause"); return -1; } else { cout << "Daten wurden zum 2.Mal erfolgreich gesendet!" << endl; } char buffer3[8000]; ofstream f("C:/test.html"); for(;;) { gebaus(buffer3); rc = recv(s, buffer3, sizeof(buffer3), 0); if(rc == -1) { cout << "Fehler: " << WSAGetLastError() << '\n'; break; } if(rc == 0) { break; } f.write(buffer3, rc); } } int main(int argc, char *argv[]) { firstcall(); system("pause"); }mfg
@night@
-
char buffer2[5000]; ... delete &buffer2;

-
@eeker
jaja. ahb keine ahnung wie ich auf den Mist gekommen bin
mein plan war erstmal das Programm zum laufen zu bringen und anschliessend das programm nochmal sauber zu schreiben und alles aufzuräumen...
mfg
@night@