使用Windows ftp.exe进行FTP上传失败:“PORT IP与nnn.nnn.nnn.nnn不同”

时间:2015-08-26 12:03:36

标签: windows ftp

我正在使用ftp.exe调用将文件上传到FTP服务器。

这个程序运行多年并上传到多台服务器,到目前为止没有问题。

更新其中一个接收服务器后,无法再上传。

这是命令序列:

open ftp.xxx.de
<user>
<pw>
>230 User logged in, proceed
cd upload
bin
put <filename>

并且响应于此,服务器回复:

  

501 PORT IP与10.100.244.5
不同   150文件状态好,即将打开连接

就是这样,在此之后连接被卡住并在一定的超时时间后关闭。

有趣的是,谷歌搜索“PORT IP不一样”只返回一个结果,这说明服务器看到的IP与预期的IP不同。

此外,使用WinSCP,FileZilla或其他FTP实用程序时,连接没有问题,并且传输文件就好了。

那么,为什么会出现以及如何解决呢?

1 个答案:

答案 0 :(得分:2)

ftp.exe使用老式的主动模式命令PORT,它要求客户端指定FTP服务器需要连接的IP地址以打开数据传输连接。

如果您位于防火墙或NAT后面,客户端可能不知道其外部IP地址并使用其本地网络地址。这会引起麻烦。服务器无法连接回来,因为它显然无法连接到客户端的本地网络。或者,如果指定的IP地址与FTP客户端连接到服务器的IP地址不匹配,服务器会立即拒绝PORT命令。这是一种安全措施,因为差异可能表示man-in-the-middle attack。您的服务器进行验证。某些服务器可能配置为忽略PORT命令中指定的IP地址并连接到客户端的已知IP地址。

另一种解决方法是,如果防火墙/ NAT可以检查FTP流量并在PORT命令中无缝修改IP地址。这显然没有发生。

您没有遇到WinSCP或FileZilla的问题,因为这些客户端默认使用被动FTP模式,这种模式没有问题。同样在活动模式下,这些客户端可以是configured to use the external IP address。 FileZilla还支持现代EPRT命令,根本不需要指定IP地址(服务器使用客户端的已知IP地址)。

有关详细信息,请参阅我的文章active/passive FTP mode

我认为没有办法让它与Windows ftp.exe一起使用。它neither supports the passive mode,也不能配置为使用外部IP地址,也不支持EPRT命令。

因此,除非您可以配置FTP服务器不进行检查并连接到客户端的已知IP地址或配置防火墙/ NAT以修改PORT命令中的IP地址,否则必须使用另一个FTP客户端。

如您所知WinSCP有效,请参阅converting the Windows ftp.exe script to WinSCP script指南。

(我是WinSCP的作者)