JSch SFTP详细记录

时间:2016-10-31 19:28:09

标签: java ftp sftp jsch

我有一个程序在FTP和SFTP使用之间交替使用,以便在远程服务器上执行某些操作。

对于FTP部分,我使用的是Apache Commons FTP客户端,而对于SFTP,我使用的是JSch库。

除了服务器的响应之外,Apache公司可以并且将会完全打印出客户端发给服务器的所有命令。

我想做一些与JSch类似的事情,以便让我在两种情况下都能记录我的应用程序。

我已经尝试成功实现了JSch库的Logger接口,但事实证明它无法向我提供发布到服务器的命令的详细表示,以及它的响应。

我曾尝试寻找类似的解决方案,但它们都围绕着类似于我正在寻找的SSH会话,而不是SFTP会话。

我尝试创建一个PrintStream,然后将其设置为频道的OutputStream,但这并没有奏效。

我也试过实现我在这里找到的一些建议,这些建议围绕着一个捕获频道的InputStream和OutputStreams的线程,但到目前为止我还没有能够正常工作。

我的问题是,是否有人设法做过类似的事情 - 例如打印底层的FTP对话框 - 使用JSch库?

1 个答案:

答案 0 :(得分:1)

JSch库不记录SFTP请求和响应。

消费流也不会帮助你,因为:

  • ChannelSftp使用流本身来读取数据包。如果你介入,你可能会破坏它的实施。
  • SFTP(与FTP相反)是二进制协议。因此,即使您设法读取流,也会获得二进制数据,您需要对其进行解码。实质上,实现SFTP协议的记录(与FTP相比)非常困难,因为您基本上需要显式记录每种类型的请求/响应消息的每个字段。

另请注意,SFTP协议比FTP更低级别。没有"很好" FTP STORRETR等高级命令。您可能会看到每次转移的数千个不同请求。可能不是,你在追求什么。