FTP client 发送 CWD 命令,故意让目录不正确,返回 550 错误,但是接下来其他命令也都不对了

2018-06-07 16:28:58 +08:00
 salamanderMH

client 是自己用 C 写的

#define BUFFER_SIZE 1024

char recv_buffer[BUFFER_SIZE];
char send_buffer[BUFFER_SIZE];

// ...
else if (start_with(cmd_read, "cd"))
{
    char *token;
    const char delim[2] = " \t";
    token = strtok(cmd_read, delim);
    char *path = strtok(NULL, delim);
    if (path == NULL)
    {
        printf("please input the path\n");
        continue;
    }
    sprintf(send_buffer, "CWD %s\r\n", path);
    send_cmd(client_socket, send_buffer);
    length = get_respond(client_socket, recv_buffer);
    printf("%s", recv_buffer);   
}


ftp server 什么要发送两次错误信息?这个如何处理呢?

Github 源码

1830 次点击
所在节点    程序员
4 条回复
ryd994
2018-06-07 17:32:28 +08:00
看起来
ryd994
2018-06-07 17:32:48 +08:00
看起来是 550 到 550end 之间都是
qiyuey
2018-06-07 19:59:47 +08:00
最近正好写了个 FTP Server,没办法正确处理,确实会终止,因为要不终止是有成本的
salamanderMH
2018-06-08 09:56:21 +08:00
我在 cd 命令的处理上,补了一点判断
```
// 250 success
length = get_respond(client_socket, recv_buffer);
printf("%s", recv_buffer);
if (!is_correct_respond(recv_buffer, 250))
{
// 再接收一次数据,windows FTP server 问题
get_respond(client_socket, recv_buffer);
printf("%s", recv_buffer);
}
```
不是 250 返回的话,再接收一次数据,感觉这样处理有点。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461239

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX