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

我正在使用调用ftp.exe将file upload到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档案状态好,即将开启连线

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

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

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

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

Solutions Collecting From Web of "无法使用Windows ftp.exe进行FTP上传:“PORT IP与nnn.nnn.nnn.nnn不同”"

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

如果您位于防火墙或NAT之后,客户端可能不知道其外部IP地址并使用其本地网络地址。 这导致麻烦。 服务器无法连接,因为它显然无法连接到客户端的本地网络。 或者,如果指定的IP地址与FTP客户端连接到服务器的IP地址不匹配,服务器会立即拒绝PORT命令。 这是一个安全措施,因为差异可能表明中间人攻击 。 您的服务器进行验证。 某些服务器可能被配置为忽略PORT命令中指定的IP地址,并连接到客户端的已知IP地址。

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


您不会遇到与WinSCP或FileZilla的问题,因为这些客户端默认为被动FTP模式,这没有问题。 在主动模式下,也可以将这些客户端配置为使用外部IP地址 。 FileZilla还支持现代的EPRT命令,它不需要指定IP地址(服务器使用客户端的已知IP地址)。


有关详细信息,请参阅有关主动/被动FTP模式的文章。


我不认为有什么办法使它与Windows ftp.exe 。 既不支持被动模式 ,也不能配置使用外部IP地址,也不支持EPRT命令。


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

如您所知WinSCP的工作原理,请参阅将Windows ftp.exe脚本转换为WinSCP脚本的指南 。

(我是WinSCP的作者)