【问题标题】:FTP: Why use IP of PASV response at all?FTP:为什么要使用 PASV 响应的 IP?
【发布时间】: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 被发明时,世界看起来有点不同,但十多年来它已经不相关了。

标签: ftp protocols ipv4


【解决方案1】:

在设计 FTP 的时候,有足够的 IP 地址,而 NAT 不是要考虑的事情。但是 FTP 旨在支持客户端在两个不同系统之间发起传输的用例 - 请参阅 RFC 959 中的图 2 或阅读有关 File eXchange Protocol 的详细信息。对于这个用例,PORT 或 PASV 命令中的 IP 地址可能与(单个)服务器不同。客户端IP。

据我所知,这就是 IPv6 的做法,但我从未在 IPv4 上看到过。

您可能指的是 EPRT 和 EPSV 命令,它们只接受端口号而没有 IP 地址。虽然这些命令是由于最初的 PORT 和 PASV 命令不支持 IPv4 而引入的,但这些命令可用于 IPv6 和 IPv4,并且一些客户端也将这些用于 IPv4,从而避免 PORT/PASV 中 IP 地址错误的问题。

【讨论】:

  • 谢谢!我阅读了 FXP 链接,但即使在这里 PASV 返回与被要求提供它的控制连接相同的 IP。 PASV 就像要求服务器提供连接 - 然后该服务器将始终使用自己的 IP(如果它遵循标准)。 PORT 就像告诉服务器一个连接——而不是提供这样的连接,客户端确实可以使用前面的 PASV 命令提供的连接到另一个服务器。尽管如此,我还是不明白为什么我 - 从客户的角度来看 - 不应该在 PASV 之后忽略答案中的 IP 部分。
  • @Pat:PASV 和 PORT 的建模方式相同,即客户端可能指示服务器连接到不同的系统,然后客户端使用 PORT,服务器可能指示客户端连接到不同的系统PASV 系统。尽管如此,对于几乎所有实际目的而言,IP 地址今天都可以忽略不计。这仍然不意味着它会在那时起作用,因为使用 NAT 不仅 IP 可能会改变,端口也会改变(尽管可能性较小)。
  • 奇怪的是,当使用带有 IPv6 的 EPSV 时,这种行为完全不同。在那里,客户端不会在 EPSV 响应中使用主机。所以这个“功能”可能只是不再真正使用了。
  • 问题是“几乎所有实际目的”是什么意思。我打算将此答案标记为正确,但老实说,我仍在考虑忽略 PASV 响应中的主机信息。再次感谢!
  • @Pat: "...问题是“几乎所有实际用途”是什么意思" - 通常不使用 FXP 功能。但是考虑到 FTP 的历史和广泛性,我很确定某个地方是一些大部分被遗忘但仍然依赖它的关键系统。 EPRT/EPSV 的好处在于,您可以确定没有人将这种 FXP 功能与 IPv6 一起使用,因为这永远不可能。
猜你喜欢
  • 2013-01-08
  • 2014-08-14
  • 2013-02-13
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多