Код: Выделить всё
int login_on_server(char *host, int port, char *login, char *pass) {
char request_login[2048];
char request_pass[2048];
char request_listd[2048];
char answer[3072];
char buf[3];
int sock,m;
/*connection */
if((he = gethostbyname(host)) == 0) {
printf("[*] Unknown host!\n");
return(-1);
}
/* creating requests */
strcpy(request_login, "USER ");
strcat(request_login, login);
strcat(request_login, "\n");
strcpy(request_pass, "PASS ");
strcat(request_pass, pass);
strcat(request_pass, "\n");
/* struct sockaddr_in */
tg.sin_family = AF_INET;
tg.sin_port = htons(port);
tg.sin_addr = *((struct in_addr *)he->h_addr);
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("[-] Error when creating socket!\n");
return(-1);
}
if(connect(sock, (struct sockaddr *)&tg, sizeof(tg)) < 0) {
printf("[-] Error when connecting!\n");
return(-1);
}
recv(sock, answer, sizeof(answer), 0);
printf("+ MOTD GOTTED!\n");
memset(buf, 0, sizeof(buf));
send(sock, request_login, sizeof(request_login), 0);
recv(sock, buf, 3, 0);
if(strncmp(buf, "331", 3) == 0) {printf("+ LOGIN cmd SUCCESS!\n");}
else { printf("- WRONG LOGIN!\n"); }
send(sock, request_pass, sizeof(request_pass), 0);
printf("+ SENDED %s", request_pass);
do {
memset(answer, 0, sizeof(answer));
recv(sock, answer, sizeof(answer), 0);
printf("+ ANSWER %s", answer);
} while((m = recv(sock, answer, sizeof(answer), 0)) != 0);
if(strncmp(buf, "230", 3) == 0) {printf("+ PASS cmd SUCCESS!\n");}
else { printf("- WRONG PASS!\n"); }
return(0);
}
Код: Выделить всё
login_on_server(host, p, login, pass);
+ MOTD GOTTED!
+ LOGIN cmd SUCCESS!
+ SENDED PASS ftp
+ ANSWER Please specify the password.
+ ANSWER 530 Please login with USER and PASS.
+ ANSWER 530 Please login with USER and PASS.
+ ANSWER 530 Please login with USER and PASS.
- WRONG PASS!
В конце "\n\n" не будет - сам проверил.
Ни понимаю почему не хочет пасс отправлять! Или в чём тут проблема?!
И почему столько раз ошибку с 530 выводит если буфер обнуляется?
Подскажите пожалуйсто!