Apache-Commons-Net FTPClient在活动模式下错误的端口号计算

时间:2014-08-06 06:51:02

标签: ftp apache-commons-net

为什么Apache-Commons-Net的FTPClient有时会对PORT命令中的端口号进行错误的计算?这是处于活动模式。例如它可以发送FTPClient PORT <some>,<ip>,<address>,<here>,235,181实际上使用的端口号是60340.这个错误计算的原因是什么?

这可能发生在3.3版本上。

我知道ftpClient.enterLocalPassiveMode();可以解决这个问题,但我想知道活动模式无法正常工作的部分。

1 个答案:

答案 0 :(得分:0)

根据您的评论,我认为您将FTP控制连接误认为是数据连接。

我假设60340是FTP控制连接的本地端口。打开数据连接时,会分配60341(因此为PORT ...,235,181)。

推理:在FTP活动模式下,客户端打开预期数据连接的侦听端口,然后通过现有控制连接通过PORT命令向服务器报告。如果服务器无法连接到该端口,则无法通过该端口访问TCP / IP数据包。当您声称两台机器仍然在端口60340&#34;进行通信时,它必须是控制连接。如果连接失败,则无法在端口上进行任何通信(&#34;无法打开数据连接&#34;)。

&#34;无法打开数据连接的真正原因&#34;错误可能是您在防火墙后面,因此服务器无法连接回客户端。现在有什么共同之处。这就是被动模式的好处。