2012-11-08 33 views
1

我儘量讓簡單的FTP客戶端來獲取有關BSD套接字文件列表。這裏是:Linux上的「500 '' FTP客戶端:命令不被理解。 「

connectTo(int client_socket, 
       struct sockaddr_in* addr, 
       char* ipv4Address, 
       char* user, 
       char* password, 
       char* response) // buffer wchich store responses 
{ 
    client_socket = socket(AF_INET, SOCK_STREAM, 0); 
    if(socket < 0) 
    { 
     printf("Can not create socket"); 
     return 2; 
    } 

    addr->sin_family = AF_INET; // address family - internet socket 
    addr->sin_port = htons(PORT_NUMBER); 
    addr->sin_addr.s_addr = inet_addr(ipv4Address); 
    if(connect(client_socket,(struct sockaddr*)addr,sizeof(*addr)) < 0) 
    { 
     printf("Can not connect!\n"); 
     return 3; 
    } 

    int size_read = recv(client_socket, response, BUF_SIZE, 0); 

     printf("size_read = %d\n",size_read); 
     response[size_read] = '\0'; // for not printing rubbish 
     printf("%s\n",response); 

    printf("sending username\n"); 
    char *username = strdup("USER trenkinan\r\n"); 
    send(client_socket,username,strlen(username)+1,0); 


    size_read = recv(client_socket, response, BUF_SIZE, 0); 

    //  printf("size_read = %d\n",size_read); 
     response[size_read] = '\0'; // for not printing rubbish 
     printf("%s",response); 
    if(strstr(response,"331")) 
    { 
     //printf("sending password\n"); 
     char *passwd = strdup("PASS test\r\n"); 

     // printf("passwd string: %s",passwd); 
     int sent = send(client_socket,passwd,strlen(passwd)+1,0); 
     size_read = recv(client_socket, response, BUF_SIZE, 0); 
     response[size_read] = '\0'; // for not printing rubbish 
     printf("%s",response); 

     //printf("sent bytes: %d\n", sent); 
    } 

    return 0; 
} 

我在我的工作站上從debian倉庫(ftpd)使用ftp服務器。我嘗試執行此代碼,當我發送密碼服務器答案,500':命令不明白。 我使用Wireshark來看看會發生什麼,以及我的程序包都看起來不錯,我用ftp命令(輕量級FTP客戶端linux上)連接和它的作品,但是從客戶端軟件包看起來一樣從我自己的客戶端。有任何想法嗎?

回答

0

所以,我發現了一個bug:strlen的(用戶名)而不是strlen的(用戶名)+1。我希望這會對某人有所幫助。

+0

哦,男人也有類似的問題和UR問題幫我找到我的錯誤=) – Mox