2017-10-10 4 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)名称
MSDOS形式のリスト
* 3)
が * 4)所有者は、MSDOS形式で利用可能..notタイプ..not利用可能 * 2)許可を取得するために、それを解析する必要があります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利用可能なリスト
* 5)当社グループは、最も広く導入されているSFTPサーバはOpenSSHに含まれてserverです。それはversion 3 draft 2を実装します。 JschはSFTPのそのバージョンも実装しています。

FTP SYSTコマンドは、サーバーのシステムタイプを表す文字列を返します。 Sftpバージョン3ドラフト2は、私が見ることができるFTP SYSTコマンドのようなものを実装していません。サーバーのオペレーティングシステムまたは一連の機能を返すコマンドはありません。

なぜ情報が必要なのかわからなくても、これを回避する方法を言うことは不可能です。

関連する問題