【问题标题】:Change FTPClient port in order to send a command更改 FTPClient 端口以发送命令
【发布时间】:2017-10-19 11:08:40
【问题描述】:

我正在连接并登录到端口 21 上的服务器。我接下来要做的是发送一个命令字符串,但是我被指示通过端口 50 发送此命令。

如何在端口 21 上连接时将端口更改为 50?

我最初尝试在端口 50 上连接到服务器,但连接被拒绝。我尝试在使用 ftpClient.sendCommand 连接到端口 21 时发送命令,我收到回复代码 500 Unknown command

【问题讨论】:

  • 你发送什么命令,你连接的是什么 FTP 服务器,你使用的是什么 ftp 客户端?
  • 很遗憾,我无法提供该信息。我正在使用 apache commons FTP 客户端

标签: java server port ftp-client


【解决方案1】:

您应该回到告诉您此要求的人那里并询问具体细节,因为 - 直言不讳 - 整个事情没有真正意义:

  • FTP 使用两个连接,控制和数据。控制通道是您在端口 21 上打开的通道,只有这个通道,之后您无法将其更改回另一个端口。所以“在端口 50 上发送命令但在端口 21 上连接”不是 FTP 的事情。
  • 端口

您还说您实际尝试发送到服务器的命令是机密的。我觉得这很难相信,但如果真的是这样,那就意味着我们正在谈论一个使用自己的 FTP 命令集工作的非标准 FTP 服务器,即常规 FTP 客户端可能无法执行您的操作完全需要。

所以回到给你这个要求的那个人那里,问他到底在说什么,最好举个例子,比如使用 Windows Command-Shell 附带的 FTP 客户端。

【讨论】:

    【解决方案2】:

    通常,当您连接时,服务器会控制端口分配。因此,当您发出 pasv 命令(被动模式)时,它通常会向您发送一个 IP / 端口以连接到数据连接。我不知道有什么可以让你做你想做的事。服务器可以限制这些类型的事物的端口范围。这是一个很好的解释。

    Active vs Passive FTP

    您也许可以发送一个 PORT 命令来专门连接到端口 50,但是这样做真的很不寻常。

    ** 编辑 **

    有两件事你可以尝试,我从来没有用过,所以 YMMV。

    在主动模式下,客户端为服务器提供一个连接端口。

    尝试将默认端口设置为 50 并打开活动模式。希望这是在您的内部网络上,因为这永远不会超过防火墙请求的安全性。

    client.setDefaultPort(50);
    client.enterLocalActiveMode(); // Apache FTPClient
    

    对于被动模式,您可以尝试设置主动端口范围。

    client.setActivePortRange(50, 50)
    client.enterLocalPassiveMode();
    

    您应该询问服务器期望的模式。

    【讨论】:

    • 谢谢我在发送命令之前使用enterLocalPassiveMode()。当我使用 ftpClient.getReplyString() 时,我似乎仍然得到 500 个未知数
    • @steam1234322 更新了答案
    • @steam1234322 您也可以打开连接并将命令手动发送到客户端。 sendCommand(FTPCmd.PORT, "50");但到那时,您可能需要做一些编码来管理连接。
    猜你喜欢
    • 2021-04-16
    • 2015-04-15
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2021-09-22
    • 2022-01-27
    相关资源
    最近更新 更多