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. 错误: 严重错误 错误: 无法连接到服务器
登陆FTP服务器提示530 Login authentication failed 错误的解决方法