Python FTP检测是否启用了主动或被动模式

Python FTP检测是否启用了主动或被动模式,python,ftp,twisted,Python,Ftp,Twisted,特别是对于Twisted,我希望能够确定连接到的服务器是否支持主动模式或被动模式。看 如果有人可以在FTP协议中解释或举例说明如何确定服务器支持主动模式或被动模式。通过向服务器发出PASV命令来启用被动模式。如果在发出该命令时,它以错误代码(应该是500 Unknown command)响应,则您知道它不受支持。如果响应为进入被动模式的227,则表示支持被动模式 使用命令行telnet和FTP命令的示例: % telnet ftp.mozilla.org 21 Trying 63.245.208

特别是对于Twisted,我希望能够确定连接到的服务器是否支持主动模式或被动模式。看


如果有人可以在FTP协议中解释或举例说明如何确定服务器支持主动模式或被动模式。

通过向服务器发出
PASV
命令来启用被动模式。如果在发出该命令时,它以错误代码(应该是
500 Unknown command
)响应,则您知道它不受支持。如果响应为进入被动模式的
227
,则表示支持被动模式

使用命令行telnet和FTP命令的示例:

% 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.
良好的命令(支持被动模式):

错误的命令(抛出500个错误):


在成功的
PASV
回复中,只有响应代码被标准化(始终为227),但包含IP/端口的文本未被标准化。它因FTP服务器供应商而异。并非所有供应商都说“进入被动模式”,并非所有供应商都将IP/端口括在括号中,一些供应商将IP/端口放在文本的开头,而其他供应商将其放在文本的结尾,等等。您必须扫描文本以查找IP/端口,您不能对其格式做出任何假设。这将在中讨论。
PASV
227 Entering Passive Mode (63,245,208,138,202,53)
FART
500 Unknown command.