1

我创建了一个内部库来使用 apache-commons 和 JSCH 库制作通用 FTP 或 SFTP

当我将文本文件从 windows 上传到 unix 时,如果我使用 FTP,我可以切换到 ASCII 模式,但这不适用于 SFTP 协议,所以我制作了一个自定义输入流阅读器,它负责处理 CRLF 与 CR windows/unix 端线路问题。

现在我担心是否有一种方法可以知道 SFTP 主机是 Windows 还是 Unix,在这种情况下,我用我的自定义 Windows2UnixInputStreamReader 封装了 FileInputStreamReader。

你知道知道主机SO的方法吗?如果解决方案是通过 FTP/SFTP 连接最好

4

2 回答 2

3

有多种方法可以完成您的任务,但我不确定您的库是否支持它们:

  • SFTP 协议包含 SSH_FXF_TEXT_MODE 文件打开标志,允许以文本模式打开文件,将 EOL 序列转换为 CRLF(自协议版本 6 AFAIR 起可用)。
  • 'newline' SFTP 扩展 - 它告诉确切的服务器的 EOL 约定
  • 解析 SSH 服务器软件/版本字符串。
于 2013-06-12T11:44:15.947 回答
0

没有 100% 的解决方案,因为 FTP 协议不依赖于平台。但是,您可以使用启发式方法。FTP 允许获取目录列表,因此您可以尝试获取知名根目录下的文件列表,并尝试根据结果得出结论。

但是这种方法不是 100%,因为 FTP 服务器的根不一定是文件系统的根,所以你可能无法在这个根下找到任何众所周知的文件或目录。

发现目标主机操作系统的更好方法可能是使用nmap之类的工具。

于 2013-06-12T11:54:41.490 回答