вопрос по сетевому пограммированию

Все о программировании под *nix
Аватара пользователя
xedin
Заглянувший
Сообщения: 38
Зарегистрирован: 19 дек 2005, 21:09
Контактная информация:

вопрос по сетевому пограммированию

Сообщение xedin »

код коннекта к серверу (ftp) и авторизации

Код: Выделить всё

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" не будет - сам проверил. 8)
Ни понимаю почему не хочет пасс отправлять! Или в чём тут проблема?!
И почему столько раз ошибку с 530 выводит если буфер обнуляется?
Подскажите пожалуйсто!
Вечность имеет обыкновение проходить очень быстро....

Аватара пользователя
sanitar
Неотъемлемая часть форума
Сообщения: 1116
Зарегистрирован: 28 ноя 2002, 02:23
Откуда: Минск

Сообщение sanitar »

А ты уверен, что не шлешь например плоский пароль, в то время как сервер хочет зашифрованного? Или наоборот?
I'll kill this code without a knife -- with only fork().

Аватара пользователя
xedin
Заглянувший
Сообщения: 38
Зарегистрирован: 19 дек 2005, 21:09
Контактная информация:

Сообщение xedin »

да, просто я сам пробовал и эмитировать такую сетеацию,
530 оявляется после того как вводишь логин и нажимаешь enter.
Но в проге точно нету "\n\n" ни после логина ни после пасса.
пробовал коннектиться как прогой так и вручную к ftp.kernel.org
Вечность имеет обыкновение проходить очень быстро....

Аватара пользователя
xedin
Заглянувший
Сообщения: 38
Зарегистрирован: 19 дек 2005, 21:09
Контактная информация:

Сообщение xedin »

всю прогу можно посмотреть здесь http://metawire.org/~xedin/upload.c.txt
и конфиг для неё
[CONFIG_XT]
LOGIN = ftp
PASS = ftp
PORT = 21
SERVER= ftp.kernel.org
Вечность имеет обыкновение проходить очень быстро....

Ответить