我想将PORT命令的支持添加到我的FTP服务器。我正在阅读RFC 959,但我无法弄清楚何时可以安全地连接到FTP客户端。例如,请考虑以下序列:
PORT 127,0,0,1,34,34
LIST
FTP客户端在发出PORT命令之前或发出LIST命令之后是否开始侦听?因为如果服务器在收到PORT后立即尝试连接到客户端,它可能会失败,因为客户端可能尚未开始监听。
规范说什么?服务器可以立即连接,还是应该等到收到使用数据连接的命令后才能连接?
答案 0 :(得分:1)
服务器不应连接到客户端,直到它获得请求数据传输的命令,例如LIST
或RETR
。请参阅RFC 959的第7节,其中显示了典型的操作顺序(RFC在早期没有正式MUST/MAY/SHOULD
规范。)
但是,由于PORT
命令中使用的端口通常是临时端口,因此客户端需要打开套接字以使操作系统分配端口号。这意味着在发送PORT
命令时,端口必须打开。但是,它可能尚未调用listen()
。