2017-10-10 319 views
1

FTP和SFTP是不同的,但我想知道SFTP中是否存在FTP中的「SYST」命令。如果我有一個使用JSch的SFTP連接,並且我想要返回系統類型,那我該怎麼做?我正在將FTP連接轉換爲SFTP。如果沒有辦法處理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); 
} 

我需要這個「系統類型」從一個位置解析文件或目錄的信息結果。它可能是Windows服務器或UNIX服務器。根據我需要解析它檢索

1)名稱
* 2)權限在MSDOS格式列表
* 3)類型
* 4)所有者在MSDOS格式..not提供..not可用名單
* 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 
+0

你確實需要那個系統類型,還是隻是信息?你可以用一些假文本替換返回值,它仍然可以工作嗎?因爲代碼取決於遠程服務器的系統描述對我來說似乎有點脆弱。 – cello

+0

@cello還有另外一個函數,它會執行一個「LIST」來返回關於文件或目錄的信息。它用於解析返回字符串,我在舊的FTP類中有一個方法,它驗證它的UNIX格式或MS-DOS格式。我不確定SFTP是否需要這樣做。我只是試圖保持這些方法,並且只將這些內部的進程轉換爲SFTP。 –

+0

我不明白你的編輯(關於文件或目錄的解析信息)與你的問題有關。 –

回答

1

您可以使用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的支持。

1

..not使用最廣泛部署的SFTP服務器是包含在OpenSSHserver。它實現了version 3 draft 2。 Jsch還實現了該版本的SFTP。

FTP SYST命令返回描述服務器系統類型的字符串。 Sftp第3版草案2沒有實現類似我可以看到的FTP SYST命令。沒有返回服務器的操作系統或一組功能的命令。

不知道爲什麼你需要這些信息,不可能說如何解決這個問題。