私は 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によると、3 桁の数字の後に - がある場合、それは複数行の応答であることを意味します。そのため、後続の 220- は不要であり、上記は次のように書き直すことができるようです。
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) !== ' '
。
- RFC に 512 という数字が現れるのは、不連続なファイル転送のページ構造について議論している場合だけなので、恣意的だと言います。
洞察をいただければ幸いです-ありがとう!!