SFTP:如何知道我是否连接到unix或windows主机?

时间:2013-06-12 11:15:33

标签: java windows unix sftp

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

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

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

你知道一个知道宿主的SO的方法吗?优选地,如果解决方案是通过FTP / SFTP连接

2 个答案:

答案 0 :(得分:2)

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

  • SFTP协议包含SSH_FXF_TEXT_MODE文件打开标志,允许 在文本模式下打开文件,将EOL序列转换为CRLF(可用 自协议第6版以来,AFAIR)。
  • 'newline'SFTP扩展 - 它告诉确切的服务器的EOL约定
  • 解析SSH服务器软件/版本字符串。

答案 1 :(得分:0)

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

然而,此方法不是100%,因为FTP服务器的根目录不一定是文件系统的根目录,因此您无法在此根目录下找到任何众所周知的文件或目录。

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