Problem beim Login an Mail-Server, bzw Problem mit send !
-
Hallo,
ich versuche gerade mit folgendem c++ code, einen erfolgreichen login beim gmx pop3 server zu realisieren. Doch aus für mich unverständlichen Gründen,scheine ich
a.) mit send nicht mehr als 4 Zeichen zu versenden zu können, der rest wird mir laut sniffer immer abgesägt.
b.) Sende ich dann alle Befehle und Paramter, in 4er Päckchen zerhackt, antwortet mir der Server nach dem versenden von "PASS meinpw\n\r", das er den Befehl nicht kennt ?!
Ich teste das ganze am gmx server, der plain text übertragung von Usernamen und Passwörten zuläßt.
Per Telnet funktionert, das ganze Provblemlos.
Weiß jemand wie ich am besten beide Probleme beheben kann ?
Mit freundlichem Gruß und Dank im vorraus,
bambusbaer
/*...Includes u. Prototypen sowie nicht wichtige Funktionen...*/ int main() { long rc; SOCKET s; SOCKADDR_IN addr; // Winsock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } // Socket erstellen s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } // Verbinden memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family=AF_INET; addr.sin_port=htons(110); // 110 für pop addr.sin_addr.s_addr=inet_addr("213.165.64.20"); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Verbindung zum Email Server aufgebaut !\n); } char bufr; // Daten austauschen while(rc!=SOCKET_ERROR) { datenrecv(rc,s); datensender(rc,s,"USER meineaddy@gmx.de\n\r"); datenrecv(rc,s); datensender(rc,s,"PASS meinpw\n\r"); datenrecv(rc,s); /* Auch wenn ich alles zerstückele, antwortet der Server auf PASS, damit das er den Befehl nicht kennt ?! */ } closesocket(s); WSACleanup(); return 1; } int datensender( long &rc, SOCKET &s, char buf[256]) { rc=send(s,buf,sizeof(buf),0); if(rc==0) { printf("Der Mail Server hat die Verbindung beendet !"); exit(1); } if(rc==SOCKET_ERROR) { printf("Fehler vom Socket !"); exit(1); } printf("CLIENT: '%s'\n",buf); return 1; } int datenrecv( long &rc, SOCKET &s) { printf("bin in datenrecv"); char br[256]; rc=recv(s,br,265,0); if(rc==0) { printf("Der Mail Server hat die Verbindung beendet !"); exit(1); } if(rc==SOCKET_ERROR) { printf("Fehler vom Socket !"); exit(1); } br[rc]= '\0'; printf("\nServer: %s\n",br); return 1; }
-
Problem gelöst, lag am sizeof, das muss durch strlen ersetzt werden ! DANKE!