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

LFTP活动模式,服务器无法识别端口命令,ftp,ftp-client,lftp,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

我正在使用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
选择打开UTF8
选择MLST修改;烫发;大小;类型;UNIX.group;UNIX.mode;UNIX.owner;
用户xxxxx
通过xxxxxx
PBSZ 0
保护蛋白
端口172、16133、11146168
列表
--->流产
----关闭中止的数据套接字
----控制插座

LFTP似乎放弃连接到数据套接字,因为远程服务器不支持PORT命令。有没有办法让LFTP仍然可以连接到端口20?根据FTP手册,显然没有问题。

我认为问题不在于FTP服务器不支持
端口
命令(它支持),而是它不喜欢FTP客户端在
端口
命令中发送的IP地址/端口

PORT 172,16,133,11,146,168
…通知服务器连接到地址172.16.133.11,端口37544*。这里有趣的部分是IP地址:它是一个RFC1918地址(也就是说,它是一个IP地址)。这反过来表明,您的FTP客户端位于某个LAN中,并且正在使用公共IP地址连接到FTP服务器

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

因此,很可能是FTP服务器试图连接到
port
命令中给定的地址/端口失败,这就是FTP服务器失败命令的原因,即:

500 Illegal PORT command
要使
端口
命令与该FTP服务器一起工作,您需要发现该服务器可以连接到的公共IP地址,以到达您的客户机。假设这个地址是
1.2.3.4
。然后,您需要使用
ftp:PORT-ipv4
选项告诉
lftp
在其
PORT
命令中使用该地址

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

希望这有帮助


*-为什么
146168
转换为端口37544

根据FTP的数据,这些参数为:

(…)16位TCP端口地址。此地址信息被分为 8位字段,每个字段的值以十进制形式传输 数字(以字符串表示)

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

    A        B
10010010 10101000 bin = 37544 dec