与服务器LFTP主动模式不承认PORT命令

问题描述 投票:12回答:1

我使用LFTP从服务器,不幸的是不承认PORT命令传输文件。我没有对服务器的控制(不知道具体的服务器是什么),我必须使用主动模式。

这是命令行为:

lftp -e 'debug 10;set ftp:passive-mode off; set ftp:auto-passive-mode no; ls; bye;' -u user,password ftp://ftp.site.com

这是调试输出:

<--- 200 Using default language en_US
---> OPTS UTF8 ON
<--- 200 UTF8 set to on           
---> OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
<--- 200 OPTS MLST modify;perm;size;type;UNIX.group;UNIX.mode;UNIX.owner;
---> USER xxxxx
<--- 331 Password required for xxxxx
---> PASS xxxxxx
<--- 230 User xxxxx logged in     
---> PBSZ 0
<--- 200 PBSZ 0 successful               
---> PROT P
<--- 200 Protection set to Private       
---> PORT 172,16,133,11,146,168
<--- 500 Illegal PORT command                    
---> LIST
---> ABOR
---- Closing aborted data socket
---- Chiusura del socket di controllo

看来,放弃LFTP连接到数据插座,因为远程服务器不支持PORT命令。有没有办法说服LFTP仍然可以连接到端口20?通过FTP手动显然是没有问题的。

ftp ftp-client lftp
1个回答
5
投票

这个问题,我想,是不是该FTP服务器不支持PORT命令(它),而是它不喜欢的IP地址/端口的FTP客户端在PORT指令发送。

PORT 172,16,133,11,146,168

......告诉服务器连接到地址172.16.133.11,端口37544 *。这里的有趣的部分是IP地址:它是一个RFC 1918地址(即它是一个private network address)。这反过来,意味着你的FTP客户端是在一个局域网的地方,并通过一个公网IP地址连接到FTP服务器。

远程FTP服务器无法连接到专用网络地址;根据定义,RFC 1918地址不公开路由的。

因此,它非常好可能是因为FTP服务器尝试连接到您的PORT命令给出的地址/端口的连接,失败,因此这就是为什么FTP服务器出现故障的命令,他说:

500 Illegal PORT command

为了与FTP服务器PORT指挥工作,你需要发现该服务器可以连接,以达到您的客户端计算机的公共IP地址。比方说,这个地址是1.2.3.4。然后,你需要告诉lftp在其PORT命令使用该地址,使用ftp:port-ipv4选项。

机会是,虽然,公网IP地址是NAT /路由器/防火墙的地址,以及该NAT /路由器/防火墙不允许连接,从外界到高编号端口(如37544),被路由到LAN内的机器。这是与活性FTP数据传输,其中使用PORT(或EPRT)命令即FTP数据传输的问题之一:它们不被认为“防火墙友好”。

希望这可以帮助!


* - 为什么146,168转化为端口37544?

根据FTP的RFC959这些参数是:

(...)16位的TCP端口地址。此地址信息被分成8位字段,并且每个字段的值以十进制数(以字符串表示)发射。

146 dec = 10010010 bin = A
168 dec = 10101000 bin = B

    A        B
10010010 10101000 bin = 37544 dec
© www.soinside.com 2019 - 2024. All rights reserved.