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

Posted

技术标签:

【中文标题】C 中的 FTP:331 / 530 请指定密码【英文标题】:FTP in C: 331 / 530 Please specify password 【发布时间】:2014-03-23 02:58:39 【问题描述】:

我在用 C 语言发送 Pass 命令时遇到问题,我正在编写一个连接到 ftp 服务器并将 LIST 打印到标准输出的简单程序。

/* -----------  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,"\n");

//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,"\n");
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;

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

我成功连接到我想要的位置:我得到了 220。

发送后 字符*缓冲区[1024]; 其中包含:“用户匿名\r\n”或“用户匿名\n” 我收到 FTP 响应 331 请指定密码。

之后我尝试发送:“PASS secret\r\n”或“PASS secret\r\n” 我得到 530

用户名是匿名的,密码是秘密的。我使用 ftp 对其进行了测试,我可以连接 我寄错了通行证吗?还是我做错了整个沟通?

【问题讨论】:

你确实得到了结果,所以可能这个 C 代码是可以的。没有段错误或类似的事情发生。我怀疑该密码毕竟有问题,所以我们可能无法为您提供帮助。 尝试发送 strlen(buffer) 而不是 MAXBUFF 字符。 【参考方案1】:

尝试使用 \r\n 作为行尾,例如就像你在解释中写的,但不像你在代码中写的那样。

【讨论】:

是的,我都试过了,在我发布代码的状态下,情况就是这样。【参考方案2】:

好的,问题在于发送。

显然我需要发送确切数量的字节,所以我把 在 send() 调用中的 strlen(buffer) 并开始工作。 该项目顺利完成。谢谢你的帮助。

“尝试发送 strlen(buffer) 而不是 MAXBUFF 字符。– 杯 17 小时前”

【讨论】:

以上是关于C 中的 FTP:331 / 530 请指定密码的主要内容,如果未能解决你的问题,请参考以下文章

求解ftp问题:响应: 530 Not logged in. 错误: 严重错误 错误: 无法连接到服务器

Ubuntu新建用户ftp登陆Ubuntu出现530错误

登陆FTP服务器提示530 Login authentication failed 错误的解决方法

ftp vsftpd 530 login incorrect 解决办法汇总

FTP连接530错误,啥意思

ftp不能登录报错