我正在用 Java 创建一个类,从服务器下载特定文件。我有一种可以直接从FTP服务器下载的方法,还有一种可以从SFTP服务器下载的方法。
在不对主机名进行任何假设的情况下(不检查它是否以 ftp:// 或 sftp:// 开头,因为有时服务器可能是本地的),有没有办法确定服务器是 FTP 还是 SFTP,因此使用哪种方法?
理想情况下,我想以编程方式确定,而不仅仅是在失败时尝试替代方案。感谢您提前提供任何帮助!
编辑:对于任何感兴趣的人,我的非常基本且绝对不完美的解决方案是这样的:
private int determineServerProtocol(String host, String port) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try (Socket socket = new Socket(host, Integer.parseInt(port))) {
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
result = in.readLine();
out.close();
in.close();
} catch (NumberFormatException | IOException e) {
e.printStackTrace();
}
if (result.contains("SSH")) {
System.out.println("Server is SFTP");
// do things...
} else {
System.out.println("Server is FTP");
// do things...
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
你可以做一个telnet。Apache Commons 提供了许多互联网协议的客户端。
https://commons.apache.org/proper/commons-net/
然后分析答案。
据我所知,所有的 SSH 服务器都会用 SSH 来回答一些问题。
telnet demo.wftpserver.com 2222
Trying 199.71.215.197...
Connected to demo.wftpserver.com.
Escape character is '^]'.
SSH-2.0-WingFTPServer
Run Code Online (Sandbox Code Playgroud)
不是 SSH
telnet ftp.funet.fi 21
Trying 193.166.3.2...
Connected to ftp.funet.fi.
Escape character is '^]'.
220 FTP Welcome
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12010 次 |
| 最近记录: |