LFTP活动模式,服务器无法识别PORT命令

时间:2013-02-22 11:00:40

标签: ftp ftp-client lftp

我正在使用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手册显然没问题。

1 个答案:

答案 0 :(得分:5)

我认为问题不在于FTP服务器不支持PORT命令(它确实如此),而是它不喜欢FTP客户端发送的IP地址/端口在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服务器失败命令,说:< / p>

500 Illegal PORT command

要使PORT命令与该FTP服务器一起使用,您需要发现该服务器可以连接到的公共 IP地址,以便访问您的客户端计算机。假设这个地址是1.2.3.4。然后,您需要使用lftp选项告诉PORTftp:port-ipv4命令中使用该地址。

然而,有可能公共IP地址是NAT /路由器/防火墙的地址, NAT /路由器/防火墙不允许连接,从外部世界到高编号端口(例如 37544),路由到LAN内的机器。这是使用PORT(或EPRT)命令进行活动 FTP数据传输, FTP数据传输的问题之一:它们是不被视为“防火墙友好”。

希望这有帮助!

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

根据FTP的RFC959,这些参数是:

  

(...)16位TCP端口地址。该地址信息被分解为   8位字段和每个字段的值以十进制形式传输   number(以字符串表示)。

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

    A        B
10010010 10101000 bin = 37544 dec