我使用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服务器不支持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