2013-05-13 162 views
1

我陷入了一個問題。根據我最新的要求,我必須將文件上傳到ftp或sftp服務器。問題是我不知道服務器是ftp還是sftp。在運行時,客戶端將提供服務器的ip和其他詳細信息,我必須上傳文件。所以,在運行時,我必須明白服務器是ftp或sftp,然後需要採取相應措施。那麼,這有什麼出路嗎?文件上傳到ftp和sftp

+0

獲取ftp和sftp客戶端,嘗試以任一方式連接,並查看所發生的事情?這不是火箭科學......如果前門(ftp)被鎖定,請回過頭去嘗試sftp。 – 2013-05-13 18:33:17

+0

在研究這個問題時,一定要確定它是否真的是'sftp',而不是'ftps'或'ftp over ssh'。 – BLuFeNiX 2013-05-13 18:47:58

回答

2

默認情況下,SFTP(SSH文件傳輸協議)使用端口22。

有些人使用「SFTP」表示FTPS(FTP-over-TLS)。在這種情況下,您有兩種選擇:顯式TLS和隱式TLS。隱式TLS默認使用端口990。在顯式模式下,客戶端默認連接到端口21,然後通知服務器在現有連接上啓動TLS握手。

平原FTP使用端口21

現在,用戶可以能夠明確指定要使用的協議。

最後,您可以嘗試連接,從套接字中獲取第一行數據並對其進行分析。在FTP/FTPS第一行應該以220SP開頭(SP代表空格,字符代碼爲0x20)。其他響應代碼也可以給出。在SSH/SFTP中,該行以「SSH-2.0-」開頭。

+0

ftp中的FTP或SFTP,並且sftp將使用不同的端口(分別爲21和22)。這應該是「服務器的ip和其他細節」的一部分。那麼,如何從那裏獲取代碼?你能舉個例子嗎? – Souvik 2013-05-14 06:14:29

+0

@Souvik我不知道我理解你的問題。你想從哪裏得到哪些代碼? – 2013-05-14 06:15:39

+0

我的客戶端只會在運行時爲我提供IP(不是端口,如果是FTP,我必須使其爲21或22)用戶名和密碼,但沒有關於服務器的信息是ftp或sftp。我必須連接到服務器,並且需要確定服務器是FTP服務器還是SFT服務器。那麼,是否有任何可以用java編寫的程序來識別它。 – Souvik 2013-05-14 12:21:26

0

ftp和sftp將使用不同的端口(分別爲21和22)。這應該是「服務器的ip和其他細節」的一部分。

+0

我的程序將根據服務器確定端口。那麼是否有任何方法來識別服務器 – Souvik 2013-05-14 06:15:30