抱歉不断征求意见。
我正在尝试使用 cmd 命令从我的 FileZilla 服务器下载文件ftp
这确实有效,当端口设置为 21 时,我可以访问服务器并下载文件。
然而,当我将端口更改为 80 时,我不能再这样做了,它确实建立了连接,但在发送命令后除了错误 425 之外没有做任何事情get
。
端口 80 和 21 在路由器和 FileZilla 中都打开
没有防火墙
抱歉不断征求意见。
我正在尝试使用 cmd 命令从我的 FileZilla 服务器下载文件ftp
这确实有效,当端口设置为 21 时,我可以访问服务器并下载文件。
然而,当我将端口更改为 80 时,我不能再这样做了,它确实建立了连接,但在发送命令后除了错误 425 之外没有做任何事情get
。
端口 80 和 21 在路由器和 FileZilla 中都打开
没有防火墙
FTP 使用单独的“控制”和“数据”连接。端口 21 仅用于控制——每次数据传输(包括目录列表)都是新的临时端口对上的新连接。这些端口必须在防火墙中打开,如果位于 NAT 之后,则必须适当地“端口转发”。
大多数家庭路由器和防火墙都对端口 21 进行了特殊处理——路由器侦听用于打开 FTP 数据通道的控制命令(即 /
PORT
和EPRT
/PASV
命令EPSV
),并自动为其中提到的数据传输端口创建临时防火墙规则。这对于“主动模式”(ftp.exe 的默认设置)尤其重要,因为数据连接是向后的,即从 FTP 服务器到客户端,因此对于处于 NAT 下的客户端,它们必须有端口转发规则。
此外,这些命令指示要连接的(客户端或服务器的)IP 地址,因此您的路由器也可能会尝试重写运行中的命令,以便它们引用您的外部 IP 而不是内部 IP。
然而,当通过其他端口发送相同的命令时,重写并没有完成——防火墙保持关闭状态,并且没有设置端口转发规则。(路由器不识别 FTP 只是因为它“看起来像 FTP”;有相当多的协议看起来很像FTP。)
如果您的路由器有“ALG”(“应用层网关”)部分或“L7 协议”部分,则可以更改将哪些端口作为“FTP 端口”处理。
对于被动模式,可以在服务器端静态定义端口。一般来说,如果您在家里设置 FTP 服务器,您应该将其配置为使用特定的“被动端口”范围(例如 50000-50999),并在路由器上为整个范围手动创建端口转发规则。这将使 FTP 服务器在任何控制端口上工作,只要客户端使用被动模式。
但是,主动模式需要在客户端进行此类配置和端口转发。同样,许多 FTP 客户端让您选择将哪些端口用于主动模式;但我认为 ftp.exe 也没有这样的选项。
总之,您可能应该使用不同的 FTP 客户端,例如,
winscp.com
如果您需要 Windows CLI,请使用 WinSCP(我也建议使用 lftp,但它似乎缺少 Windows 版本),确保将其设置为被动模式,然后进行配置FTP 服务器有一个用于被动传输的静态端口范围。(好吧,一般来说,在这个时代你不应该设置 FTP 服务器;你应该使用 SFTP 或其他东西——或者至少设置一个简单的 VPN 来使用 FTP 服务器,这不仅是为了安全,也是为了以避免整个 PORT/PASV 问题。)
“虚拟服务器”在某些路由器中是 端口转发的另一个名称。
在端口转发中,涉及两个端口:
在您的情况下,第一个应该是 80,但内部应该保持 21。
这对外界进行了伪装,但保留了功能。否则,您还需要配置 Filezilla 以使用其他端口。