所以,这是我的问题。顺便说一下,我使用的是Linux内置客户端。
我正在用C编写一个FTP服务器(TCP套接字),但在实现命令之前,客户端需要询问用户名和密码。如果它们相同,我必须授予用户访问权限。问题是,一旦我完成登录,我的服务器就会发送一个SYST命令并停止连接。在我的代码中,我分别调用220和331来检索用户和密码,调用230来授予访问权限。
char login_user[BUFSIZ]; // Holds the username
char login_password[BUFSIZ]; //Holds the password
char buff1[BUFSIZ];
char buff2[BUFSIZ];
int x = 0, y = 0, compare = 0;
// Ask for the username
send(sock, "220rn", 5, 0);
x = read(sock, login_user, sizeof(login_user));
if(x < 0)
perror("server: can't receive from client");
else
login_user[x] = ' ';
strncpy(buff1, login_user + 5, strlen(login_user)-7); //this copies only the username taking out surplus characters
// Ask for password
send(sock, "331rn", 5, 0);
y = read(sock, login_password, sizeof(login_password));
if(y < 0)
perror("server: can't receive from client");
else
login_password[y] = ' ';
strncpy(buff2, login_password + 5, strlen(login_password)-7); //this copies only the password taking out surplus characters
// If username and password are the same, grant access, else exit connection
compare = strcmp(buff1, buff2);
printf("%s, %s, %dn", buff1, buff2, compare);
if(compare == 0)
{
send(sock, "230rn", 5, 0);
}
else
send(sock, "421rn", 5, 0);
我想问题可能出在我的vsftpd.conf文件上,但local_enable被激活了。欢迎任何建议:)
这就是客户端的样子:
user@ubuntu:~$ftp
ftp>打开ubuntu 1111
已连接到ubuntu。
220
名称(ubuntu:user):用户
331
密码:
230
421服务不可用,远程服务器已关闭连接
ftp>
您和显示症状的服务器之间的NAT防火墙。
这个问题就像ftp想在一个新的、独立的TCP/IP连接中发送命令产生的数据,而这些数据无法通过防火墙,因为它需要从服务器发送给你,而你被隐藏在防火墙后面。使用"pasv"命令更改为被动连接,数据连接将从您连接到服务器。
有关更多详细信息,请参阅:此处