如何return SFTP 中的系统类型?

How to return the system type in an SFTP?

FTP 和 SFTP 是不同的,但我想知道在 FTP 中是否有等同于 "SYST" 命令的 SFTP .如果我有一个使用 JSch 的 SFTP 连接并且我想 return 系统类型,我该怎么做?我正在将 FTP 连接转换为 SFTP。如果没有办法处理 SFTP,是否有解决方法?

public String getSystemType()
        throws IOException, FtpException
{
    if(out == null)
        return null;
    acquire();    // Acquire the object

    try {
        ftpCommand("SYST");             //sends command to FTP to retrieve the system type.
        if(!reply.substring(0, 3).equals("215"))
            throw new FtpException(reply);
    } finally { 
        release();    // Release the object
    }

    return reply.substring(4);
}

我需要这个 "system type" 来从某个位置解析文件或目录的信息结果。它可以是 Windows 服务器或 UNIX 服务器。取决于我需要解析它以检索

1) 姓名
* 2) 权限..在 MSDOS 格式列表中不可用
* 3) 类型
* 4) 所有者 ..在 MSDOS 格式列表中不可用
* 5) 组 ..在 MSDOS 格式列表中不可用
* 6) 尺寸

* Parse a UNIX format list. With skipping number of lines.
     * The columns of a typical UNIX format list is like:
     * drwxr-xr-x   6 appli    appli        1024 May 17 20:33 java
     * -rw-------   1 appli    appli        1005 May  1 21:21 mp3list
     * drwxr-xr-x   5 appli    appli        1024 May 17 16:56 perl
     * drwxr-xr-x   6 appli    appli        1024 Apr 30 23:18 public_html

// Some UNIX format list doesn't contain the column for group like this:
            // -rw-r--r--   1 daemon         0 Dec  7 10:15 .notar
            // -r--r--r--   1 daemon       828 Mar 30  1995 HOW_TO_SUBMIT
            // -r--r--r--   1 daemon       627 Mar 30  1995 README
            // -r--r--r--   1 daemon       876 Mar 30  1995 WELCOME
            // drwxr-xr-x   2 ftp          512 Oct 13  1999 bin

部署最广泛的 SFTP 服务器是 server included with OpenSSH. It implements version 3 draft 2。 Jsch 还实现了 SFTP.

的那个版本

FTP SYST 命令returns 描述服务器系统类型的字符串。 Sftp 版本 3 草案 2 没有实现任何类似 FTP SYST 命令的东西,我可以看到。没有命令 returns 服务器的操作系统或一组功能。

不知道你为什么需要这些信息,就不可能说出如何解决这个问题。

您可以使用 SSH 版本字符串。

就像:

  • SSH-2.0-OpenSSH_5.3
  • SSH-2.0-7.34 FlowSsh:Bitvise SSH 服务器 (WinSSHD) 7.34
  • SSH-2.0-1.36_sshlib GlobalSCAPE
  • SSH-2.0-mod_sftp/0.9.8

在 JSch 中,您可以使用 Session.getServerVersion.

检索它

SFTP 本身仅使用 optional extension "vendor-id" 提供有关远程系统的信息,很少受支持。 JSch 本身绝对不支持它,最广泛的 SFTP 服务器实现 OpenSSH 也不支持它。


虽然请注意,使用 SFTP,您通常不需要解析目录列表。在 SFTP 中,大多数列表数据以二进制结构形式出现,而不是像 FTP.

那样的文本列表