【问题标题】:How to implement ALLO command on Apache FTP?如何在 Apache FTP 上实现 ALLO 命令?
【发布时间】:2018-10-18 11:44:15
【问题描述】:

我们有一个在网关中运行多年的嵌入式 Apache FTP 服务器。它总是毫无问题地工作。

但是现在一个客户正在尝试连接一个我们以前从未有过的品牌的设备,并且与迄今为止的所有其他客户相反,该设备会提前发送 ALLO 命令以确保服务器有足够的空间.

但 Apache FTP 似乎不知道该命令。跟踪日志状态:

收到:ALLO 77482
SENT: 502 命令 ALLO 未实现。

客户端切断连接。

Apache 文档中也没有该命令: https://mina.apache.org/ftpserver-project/ftpserver_commands.html

所以问题是,我可以以某种方式将自己的实现插入服务器吗? 为了清楚起见,我不是在问如何实现该功能。我如何将自己的实现传递给 Apache FTP 以供使用。如果可以在不接触源代码的情况下做到这一点。

因为有问题的应用程序已经运行了很长时间很稳定,我真的不想把 Apache FTP 服务器从那里拆下来并嵌入另一个......

【问题讨论】:

  • 那么您是在问如何配置一个基于 Apache Mina 的专有 FTP 服务器以某种方式处理新的 FTP 命令?
  • 据我所知,Apache FTP 不是基于 Mina,我认为它比较老。不过,我想配置是合适的术语。无论如何,我想通了,这让我很惊讶。

标签: apache ftp


【解决方案1】:

嗯,一旦我找到了正确的代码,这非常简单。

命令的实现很简单,在这种情况下,我刚刚开始使用一个存根进行测试:

class ALLO : AbstractCommand() {

    override fun execute(session: FtpIoSession, context: FtpServerContext, request: FtpRequest) {

        session.write(LocalizedFtpReply.translate(session, request, context,
                FtpReply.REPLY_200_COMMAND_OKAY, "ALLO", "bring it!"))
    }
}

继承AbstractCommand,覆盖execute并向会话写入响应。

问题当然是如何让服务器知道实现,这也很简单,尽管肯定似乎没有任何文档。但是您可以只实例化一个 CommandFactoryFactory,映射您的实现,构建 CommandFactory 并将其设置在 FtpServerFactory 中:

        val commandFactoryFactory = CommandFactoryFactory()
        commandFactoryFactory.addCommand("ALLO", ALLO())
        serverFactory.commandFactory = commandFactoryFactory.createCommandFactory()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多