2013-06-12 94 views
0

我已经创建了一个内部库,使普通的Full Tilt点数或SFTPs使用Apache的公地和JSCH库SFTP:如何知道我是否连接到unix或windows主机?

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

现在我担心,如果有一种方法来知道SFTP主机是Windows还是Unix,在这种情况下,我封装FileInputStreamReader与我的自定义Windows2UnixInputStreamReader。

你知道一个方法来了解主机的SO吗?最好的解决方案,如果是througth的FTP/SFTP连接

+0

请问远程端使用自定义输入阅读器是不够的?如果您打算将您的图书馆用于无人值守(无人操作)FTP传输,最简单的方法似乎是将参与主机的一些数据库与其各自的操作系统相关联。 –

+0

我试图做一个通用的库来处理FTP/SFTP的最小配置:主机,用户,通过,端口 – Telcontar

+0

您的问题准确地告诉我们_generic_库需要知道至少类型的本地和远程操作系统。将操作系统指纹识别功能放入_generic FTP_库是一件不合适的事情。 –

回答

2

有许多可能的方式来完成你的任务,但是我不知道,如果你的库支持他们:

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

你知道,如果JSCH lib有一个方法来提取de换行符分隔符?有了它,我可以肯定地知道,如果我在windows或unix环境 – Telcontar

+0

他们的ChannelSftp有.getExtension方法,你应该看看'newline'扩展是否可用。也可以有其他名称。而且,并非每个服务器都发送它。 –

+0

在这台服务器上没有幸运。尝试过换行符,换行符,newLine和NewLine – Telcontar

0

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

但是,这种方法不是100%,因为FTP服务器的根目录不一定是文件系统的根目录,因此您无法在此根目录下找到任何已知的文件或目录。

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

+0

他没有FTP问题,因为它允许文本模式传输,问题在于SFTP,它在协议版本6之前不允许文本模式传输。 –

相关问题