FTP中的C:331/530请指定密码

FTP in C: 331 / 530 Please specify password

我在C语言中发送pass命令时遇到了一个问题,我正在编写一个简单的程序,该程序连接到一个ftp服务器并将列表打印到stdout。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* -----------  SET UP CONNECTION ---------*/
//creating socket
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
    perror("Main: Creating socket:");
    return ERROR;
}

//Zero out addr
memset(&addr, 0, sizeof(addr));

//Getting host name
hPtr=gethostbyname(url.host);
if(hPtr==NULL)
{
    perror("Error while getting host name:");
    return ERROR;
}

//Setting up addr for connect
addr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)hPtr->h_addr_list[0])));

addr.sin_family = AF_INET;
addr.sin_port = htons(url.port);
if((connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr))) < 0)
{
    perror("Error: Connect socket :");
    close(sock);
    return ERROR;
}

//Wait for Service ready
bzero(buffer, MAXBUF);
if(recv(sock, buffer, sizeof(buffer),0)<0)
{
        perror("Error while receiving socket:");
}

printf("%s", buffer);

/* -----     LOGIN USER     -----------*/
bzero(buffer, MAXBUF);
//setup login
strcpy(buffer,"USER");
strcat(buffer,url.user);
strcat(buffer,"
"
);

//Send login
if((send(sock,buffer,MAXBUF,0))<0)
{
    perror("Error while sending socket:");
}
//Receive answer
if((recv(sock, buffer, sizeof(buffer),0))<0)
{
    perror("Error while recieving socket:");
}
printf("%s", buffer);


//Send password
bzero(buffer, MAXBUF);
//setup password
strcpy(buffer,"PASS");
strcat(buffer,url.pass);
strcat(buffer,"
"
);
printf("%s",buffer);
//Send password

if((send(sock,buffer,MAXBUF,0))<0)
{
    perror("Error while sending socket:");
}
//Receive response

if((recv(sock, buffer, sizeof(buffer),0))<0)
{
    perror("Error while recieving socket:");
}
printf("%s", buffer);

close(sock);
return OK;

现在我成功地解析了launch参数中得到的地址。

我成功地连接了我想连接的地方:我取回了220。

发送后char*缓冲区[1024];其中包含:"用户匿名
"或"用户匿名"我得到ftp响应331请指定密码。

之后我尝试发送:"pass secret
"或"pass secret
"我得到530

用户名是匿名的,密码是机密的。我用ftp测试了它,我可以连接我发错通行证了吗?或者我的整个沟通都是错的?


好吧,问题就在这里。

我需要在明显的字节中输出准确的字节,所以我输入在SEND()呼叫中Strlen(缓冲器)并开始工作。该项目完全成功。谢谢你的帮助。

"Try sending strlen(缓冲器)instead of maxbuff characters.-杯17小时前


试着用「R」作为结尾,E.G.就像你在解释中写的一样,但不象你在你的代码里写的那样。