Java-как определить, является ли сервер FTP или SFTP?


Я создаю класс на 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...
        }
    }
3 2

3 ответа:

Вы можете сделать телнет. Apache Commons предоставляет клиентскую часть многих протоколов intenet.

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

Не SSH

telnet  ftp.funet.fi 21
Trying 193.166.3.2...
Connected to ftp.funet.fi.
Escape character is '^]'.
220 FTP Welcome

Протокол должен быть частью настроек сеанса вместе с именем хоста и учетными данными. Никогда не пытайтесь выполнить автоматическое определение между безопасным и небезопасным протоколом. Это ужасный недостаток безопасности.

С таким "автоопределением" возможный MITM-атакующий может легко заставить ваше приложение использовать незашифрованный протокол FTP, даже если реальный сервер на самом деле использует протокол SFTP. Это заставит ваше приложение отправить ваши учетные данные SFTP прямо атакующему, незашифрованный!


Если вы хотите сделать ваше приложение вперед совместимым с возможным будущим переключением на SFTP, по крайней мере, Сделайте так, чтобы оно никогда не возвращалось к FTP, как только соединение SFTP когда-либо будет успешным.


Также не вижу смысла в явном обнаружении. Просто попробуйте подключиться и аутентифицировать с помощью FTP, а если это не удается, попробуйте SFTP. Вы никогда не можете знать, как будет происходить переход. Они могут выбрать, чтобы FTP-сервер работал вместе с SFTP, но с логином отключена или любая другая комбинация.

Знать основы:

Ключевое отличие: FTP и SFTP-это два разных протокола передачи файлов, и основное различие между ними заключается в безопасности, связанной с передачей файлов. FTP был первым файловым протоколом и является менее безопасным, в то время как SFTP расшифровывается как secure file transfer protocol, и, как следует из названия, является более безопасным, чем FTP.
ПРОГРАММА ПЕРЕДАЧИ ФАЙЛОВ

Сети TCP/IP, такие как интернет, используют FTP или протокол передачи файлов для передачи файлов. от одного компьютера к другому. FTP работает на серверной и клиентской архитектуре, что означает, что клиент может получить доступ к любой информации на сервере в любой момент времени. Некоторые серверы защищены паролем, так что доступ к информации можно получить только после ввода идентификатора и пароля.

Загрузка музыки mp3 или свободного программного обеспечения из интернета - это два распространенных примера FTP, где клиенту не требуется какой-либо идентификатор или пароль для доступа и загрузки информации. С другой рука доступа к вашей электронной почте является примером SFTP, где вам потребуется ID и пароль для доступа к информации на сервере.

FTP использует два отдельных канала для передачи данных и управления, оба из которых не зашифрованы, это означает, что информация с любого из каналов может быть перехвачена и доступна. Использование незашифрованного канала является огромной дырой петли безопасности и привело к разработке более безопасного режима связи, такого как FTPS и SFTP.

SFTP является более безопасным способом связь и основана на SSH (secure shell). SSH-это безопасный способ предоставления доступа ко всем учетным записям оболочки на удаленном сервере. Информация, передаваемая с помощью SFTP, сначала разделяется на небольшие пакеты и, в отличие от FTP, SFTP использует только один канал для передачи данных и управления. Перед обменом информацией между двумя компьютерами SFTP проверяет личность клиента и после установления защищенного соединения отправляет зашифрованную информацию (шифр шифрования является предопределенный).

SFTP