2017-10-19 327 views
0

我正在連接並在端口21上登錄到服務器。接下來我要做的是發送一個命令字符串,但是我被指示通過端口發送此命令50.更改FTPClient端口以發送命令

如何在端口21連接時將端口更改爲50?

我試圖連接到端口50上的服務器,並且連接被拒絕。我嘗試發送命令,同時連接端口21使用ftpClient.sendCommand和我得到一個回覆​​代碼500 Unknown command

+0

你正在發送什麼命令,你連接了什麼FTP服務器,以及你正在使用的ftp客戶端是什麼? – Lothar

+0

不幸的是,我不能透露這些信息。我使用的是Apache公共FTP客戶端 – steam1234322

回答

0

通常當您連接,服務器控制端口分配。因此,當您發出pasv命令(被動模式)時,它通常會發送回IP /端口以連接到數據連接。我不知道有什麼可以讓你做你想做的事。服務器可以限制這些類型的端口範圍。這是一個很好的解釋。

Active vs Passive FTP

您可以發送PORT命令連接到端口50特別,但它確實不尋常的做這樣的事情。

**編輯**

有兩兩件事你可以試試,我從來沒有使用,也可以,所以因人而異。

在主動模式下,客戶端爲服務器提供一個連接端口。

嘗試將默認端口設置爲50並打開活動模式。希望這是在你的內部網絡上,因爲這永遠不會超過安全的防火牆請求。

client.setDefaultPort(50); 
client.enterLocalActiveMode(); // Apache FTPClient 

對於被動模式,您可以嘗試設置活動端口範圍。

client.setActivePortRange(50, 50) 
client.enterLocalPassiveMode(); 

您應該詢問服務器期望的模式。

+0

謝謝我在發送命令之前使用'enterLocalPassiveMode()'。當我使用'ftpClient.getReplyString()'' – steam1234322

+0

@ steam1234322時,我似乎仍未知道500個未知數。更新了答案 – Mike

+0

@ steam1234322您也可以打開連接並手動將命令發送到客戶端。 sendCommand(FTPCmd.PORT,「50」);但在那個時候,你可能需要做一些編碼來管理連接。 – Mike

0

你應該回去誰告訴你這個要求的一個,並詢問細節,因爲 - 說白了 - 整個事情沒有任何真正意義上的:

  • FTP工作與兩個連接,控制和數據。控制通道是您在端口21上打開的控制通道,只有這一個,之後您不能將其更改回另一個端口。所以「在端口50上發送一個命令,但在端口21上連接」對於FTP來說並不是一回事。
  • 端口< 1024上的數據連接並不常見,所以很難相信具有該要求的那個人也是這樣。對於那些需要主動FTP連接的人來說,現在每個人都試圖避免,因爲他們很難配置。在端口<上打開一個監聽器將需要Unix系統的root權限,這對於進行FTP傳輸來說不太可能。

你也說過你實際嘗試發送給服務器的命令是保密的。我覺得很難相信,但如果真的這意味着我們正在討論一個使用自己的FTP命令的非標準FTP服務器,即普通的FTP客戶端可能無法做到你需要。

所以回到給你這個要求的人,問他說的是什麼,理想情況下用一個例子說明如何去做,比如說使用Windows Command-Shell附帶的FTP客戶端。