我有一个 FTP 脚本,用于自动执行文件传输。在我的 PC(XP SP2)上传输工作正常,但当我尝试在 PC(XP SP2)上的 VM 上运行它时,“put”命令发出以下错误:
504 Command not implemented for that parameter.
FTP 文件:
open [ftp site]
[username]
[password]
cd [directory on FTP server]
binary
hash
put ..\[subfolder1]\[Subfolder2]\[subfolder3]\[filename]
bye
FTP 站点/服务器遍布世界各地,不受我的控制。
据我对 504 的理解,这意味着该命令永远不会起作用,但由于相同的脚本在我的 PC(托管 VM)上确实起作用,因此消除了语法、文件命名等。
当从 VM 触发 put 命令时,它实际上会在目标 FTP 服务器上创建一个长度为 0 的文件,但不会填充该文件。
答案1
在我看来,这确实与网络问题有关。
主机 PC 上的防火墙是否应该为来自 VM 软件的流量打开。在我看来,所有 FTP 命令都是允许的(端口 20),但是当您开始实际的数据传输时,它无法打开数据通道(在端口 21 上)。
您在使用其他传输数据的命令时是否遇到同样的错误?例如“LIST”。
尝试被动模式(命令“PASV”),因为它不会为数据打开不同的通道。
答案2
托管 VM 的计算机与 VM 本身不同。
如果命令在计算机的基本操作系统上运行,则该 FTP 服务器允许它。
如果命令在 VM 操作系统上不起作用,则该 FTP 服务器(另一个)不允许它。
我在这个问题中遗漏了其他内容吗?
好的,您是说 FTP 服务器是同一个,并且
您无法从 VM 客户端进行 FTP-PUT,而从您的基本 OS ftp 客户端可以进行 FTP-PUT?
如果是这种情况,可能需要对两个 FTP 会话进行数据包捕获。
如果失败的会话运行方式不同,则您的 FTP 服务器可能不支持该部分。
例如,检查 FTP 主动/被动模式差异(可能不是您的问题,但类似这样的问题)。
您可以使用 Wireshark 或 tcpdump 捕获针对服务器 TCP 端口进行过滤的信息。
更新根据您的评论。
我仍然建议您应该进行捕获以查看失败的原因。
但是,您还可以做另一件事,ftp -v
即在发生所有控制通信时提供它们。您可以使用它来查看两个 FTP 客户端的行为有何不同,以确定问题所在。糟糕,那不是正确的选择……有一些东西可以追踪命令交换,现在无法获取。也许,这里有人记得。
答案3
根据我的研究,504 可能还有其他含义Command not implemented for that parameter
。它也可能是:
504:等待网关超时
504:未知的安全机制
希望这些能对你有帮助。第一个尤其有启发性。
问题:
手动输入时会发生什么?
您是否尝试过使用协议嗅探器来查找 PC 和 VM 通信之间的确切差异?
编辑
远程 FTP 服务器是否有某种安全机制允许您的计算机但不允许 VM 访问?