2017-10-19 322 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客户端。