强制lftp打开二进制连接?

时间:2016-04-16 15:58:46

标签: bash ftp ftp-client lftp

问题:我正在尝试创建公共FTP站点的本地镜像。当我使用lftp来完成这项工作时,它会创建一个没有问题的镜像,但是当我几天后尝试更新镜像时,由于卡在几个文件上而变得很慢。

正在运行lftp -d我可以看到lftpRETR文件发出了多个请求,但这些请求会产生多条**** Timeout - reconnecting条消息,大约2-3分钟后见

  

< --- 150打开{filename removed} .`

的BINARY模式数据连接

在最后一个命令之后,文件成功下载并且lftp继续进行。

从手册中我了解到BINARY是lftp的默认模式,但不知何故它似乎不适用于早期请求。有人可以建议我如何强制lftp始终打开BINARY模式数据连接来下载所有文件吗?

这是一个MWE:

``lftp -d -u anonymous,anonymous -c "open {url}; get {file}"``

来自lftp -d的回复:

---- Connecting to {url} ({IP}) port 21
<--- 220 (vsFTPd 3.0.3)                          
---> FEAT
<--- 211-Features:                                     
<---  EPRT
<---  EPSV
<---  MDTM
<---  PASV
<---  REST STREAM
<---  SIZE
<---  TVFS
<--- 211 End
---> USER anonymous
<--- 331 Please specify the password.            
---> PASS anonymous
<--- 230 Login successful.                                      
---> TYPE I
<--- 200 Switching to Binary mode.                         
---> SIZE {file}
<--- 213 3321                                              
---> MDTM {file}
--- 213 20160318190446                                         
---> PASV
<--- 227 Entering Passive Mode ({IP}).        
---- Connecting data socket to ({IP}) port 55380
---- Data connection established                                  
---> RETR {file}
**** Timeout - reconnecting                                     
---- Closing data socket
---- Closing control socket

2 个答案:

答案 0 :(得分:2)

lftp默认使用二进制模式进行所有文件传输,使用ascii模式进行目录列表。所以二进制模式不应该是一个问题。

也许你有一个微妙的连接问题,有时将net:socket-maxseg设置为较低的值(例如500)有帮助。

答案 1 :(得分:0)

二进制模式的ftp命令为bin,因此在get文件之前使用该命令。

cd /direc/tory; bin; get file.xml

问题在于我看到了

---> TYPE I
<--- 200 Switching to Binary mode.                         
输出中的

,因此您已经处于二进制模式。我想知道你有不同的问题吗?我也看到你正在使用被动模式(PASV),这很好,因为被动工作围绕防火墙和NAT [1],所以我们还需要另外一个原因来看待这些超时

您是否有其他线索,可能来自pingnetstat