有没有办法识别 FTP 服务器是否启用了被动模式?

有没有办法识别 FTP 服务器是否启用了被动模式?

我正在尝试连接到 FTP 服务器,它在主动模式下工作正常,但当我尝试通过被动模式连接时似乎出现超时消息。有没有办法检查 FTP 服务器是否在被动模式下接受请求?

ftp -p <FTP_Server> 
ftp> quote pasv 
227 Entering Passive Mode 
ftp> ls
227 Entering Passive Mode 
ftp: connect: Connection timed out

到目前为止我已经尝试了以下操作:

  • 从我的 WSL 环境(即 Ubuntu),我尝试与 FTP 服务器进行 FTP 通信。

  • 但在执行列表操作时,我遇到了超时问题。这是什么意思?这是否意味着不支持被动通信?

答案1

PASV 命令用于在服务器上启用被动模式。如果您发出该命令并收到错误代码(应该是 500 未知命令),则表明不支持该模式。如果您收到 227 进入被动模式响应,则表明支持被动模式。

Using telnet and FTP commands from the command line as an example:
% telnet ftp.mozilla.org 21
Trying 63.245.208.138...
Connected to dm-ftp01.mozilla.org.
Escape character is '^]'.
220-  [greeting omitted]
USER anonymous
331 Please specify the password.
PASS jathanism@
230-  [banner omitted]
230 Login successful.
Good command (passive mode is supported):
PASV
227 Entering Passive Mode (63,245,208,138,202,53)
Bad command (500 error thrown):
FART
500 Unknown command.

在成功的 PASV 响应中,只有响应代码(始终为 227)是标准化的;包含 IP/端口的文本不是标准化的。不同的 FTP 服务器提供商对此有所不同。并非所有供应商都使用短语“进入被动模式”,并非所有供应商都将 IP/端口放在括号中,一些供应商将 IP/端口放在文本的开头,而其他供应商则将其放在末尾,等等。您必须扫描文本以查找 IP/端口;您不能假设其格式正确。

使用 FTP、FTP/SSL Auth(显式 SSL)或 FTPS(隐式 SSL)时,初始连接通过命令端口建立。命令端口通常为端口 21(用于 FTP 和 FTP/SSL Auth)和默认端口 990(用于 FTPS、隐式 SSL)。命令端口建立 FTP 服务器连接并接受身份验证。身份验证成功后,FTP 客户端发出命令以获取文件夹和文件列表,该列表通过数据端口发送。在 FTP 客户端和 FTP 服务器之间,会协商数据端口。

注意:如果使用 HTTP 或 HTTPS 连接到 FTP 服务器,FTP 服务器管理员必须启用目录列表;否则,连接到主文件夹和文件时将不可见。对于数据连接,WS FTP Professional 将默认尝试使用被动模式进行连接。当 WS FTP Professional 建立被动模式连接以协商数据端口时,它会询问 FTP 服务器要打开哪个端口并接收文件夹和文件列表。如果被动模式失败并且 FTP 服务器提供的端口未在本地计算机防火墙或网络上打开,WS FTP Professional 将发送端口命令。端口命令会通知 FTP 服务器应向其发送文件夹和文件列表的 IP 地址和端口。如果 FTP 服务器网络没有可用的端口或无法连接到服务器,则端口模式与 WS FTP Professional IP 地址的数据连接将失败并超时。当使用端口模式连接时,WS FTP Professional 默认发送计算机的本地 IP 地址。如果这是不可路由的 IP 地址,FTP 服务器将无法响应客户端。在 WS FPT Professional 中设置 FTP 服务器的公共 IP 地址。要查找公共 IP 地址,请执行以下操作:转到www.whatismyip.com在您的浏览器中。将返回公共 IP 地址。在 WS FTP Professional 中,输入此 IP 地址。从“工具/选项”菜单中选择“防火墙”。检查“强制端口 IP 地址”选项。在此处输入公共 IP 地址。单击“确定”

相关内容