【发布时间】:2018-04-23 03:22:03
【问题描述】:
当发送 FTP 命令“PASV”时,FTP 服务器会响应有关可以建立数据连接的主机和端口的信息。
如果涉及 NAT,则此主机信息可能会出现问题。一些客户端通过将提议的数据连接主机的 IP 与来自控制连接的 IP 进行比较来解决此问题:如果 PASV 之后提议的主机是本地主机,而控制连接未使用本地主机,则只有 PASV 提供的端口使用主机连接的 IP 时使用响应。
作为示例,请参阅 Apache Commons 实现:http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java?revision=1788985&view=markup#l3876
我现在的问题是:为什么要使用 PASV 答案的主机?为什么不总是只使用 PASV 应答的端口,而是使用控制连接的主机?据我所知,这是使用 IPv6 完成的,但我从未在 IPv4 上看到过。为什么?
【问题讨论】:
-
你正在处理一个绝对古老的协议,任何人都不应该使用它。当 FTP 被发明时,世界看起来有点不同,但十多年来它已经不相关了。