ftp如何回复工作

时间:2013-04-04 20:19:17

标签: ftp

我一直在阅读FTP规范并使用Wireshark来捕获我的FTP客户端发送/接收的数据包,并对它们有一些疑问。

首先来自我的FTP服务器的“连接问候”(如FTP RFC所称):

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 2 of 50 allowed.
220-Local time is now 15:22. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.

如果有RFC959#page-35,则在三位数字后面表示它是一个多行响应。因此,似乎后续的220-s是不必要的,以上可以改写如下:

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
You are user number 2 of 50 allowed.
Local time is now 15:22. Server port: 21.
This is a private system - No anonymous login
IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.

这是对的吗?

此外,线路的长度是否有限制? RFC只提到一次“行长”。这里:

  A reply is defined to contain the 3-digit code, followed by Space
  <SP>, followed by one line of text (where some maximum line length
  has been specified)

然而,RFC并没有讨论如何或何时指定这样的“最大行长度”。它为这些多行响应提供的具体用例是STAT回复,但在我看来,这个例子有点人为,因为我认为STAT响应不会有新行。

最后,当一个人收到回复时,怎么知道?以下是phpBB的用法:

https://github.com/phpbb/phpbb3/blob/develop/phpBB/includes/functions_transfer.php#L885

do
{
    $result = @fgets($this->connection, 512);
    $response .= $result;
}
while (substr($result, 3, 1) !== ' ');

他们选择的512似乎是随意的*,然而,暂时忽略它们的substr($result, 3, 1) !== ' '也会打破我在本文前面所做的“连接问候”重写。

  • 我说它是随意的,因为只有512号码出现在RFC中的唯一一次是它讨论不连续文件传输的页面结构。

任何见解都会受到赞赏 - 谢谢!!

2 个答案:

答案 0 :(得分:1)

您对多线响应是正确的。但是许多服务器使用的格式是在每行开始时重复的代码。所以你需要能够处理这两个问题。

至于线长,我不知道。 phpBB代码似乎并不遵循RFC。

答案 1 :(得分:0)

你是对的。但是如果你当时只实现linux系统上可用的服务器和客户端,那么你的代码在没有3位数的情况下无法运行。因为所有人都遵循rfc。所以你必须遵循rfc。