强制 lftp 打开二进制连接?
Force lftp to open binary connections?
问题:我正在尝试创建 public FTP 站点的本地镜像。当我使用 lftp
完成工作时,它创建了一个没有问题的镜像,但是当我几天后尝试更新镜像时,由于卡在几个文件上,它变得非常慢。
运行 lftp -d
我可以看到 lftp
向 RETR
文件发出了多个请求,但这些请求导致了多个 **** Timeout - reconnecting
消息,之后我看到大约 2-3 分钟
<--- 150 Opening BINARY mode data connection for {filename removed}.`
最后一条命令后,文件成功下载,lftp 继续进行。
从手册中我了解到 BINARY 是 lftp
的默认模式,但不知何故它似乎不适用于早期请求。有人可以建议我如何强制 lftp 始终打开二进制模式数据连接以下载所有文件吗?
这是一个 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
二进制模式的 ftp 命令是 bin
因此在 get
文件之前使用该命令。
cd /direc/tory; bin; get file.xml
问题是我看到了
---> TYPE I
<--- 200 Switching to Binary mode.
在你的输出中,所以你已经处于二进制模式。我想知道你是否有不同的问题?我还看到您正在使用被动模式 (PASV
),这很好,因为被动模式可以绕过防火墙和 NAT [1],所以我们需要另一个原因来解释为什么您会看到这些超时。
您是否还有其他线索,也许来自 ping
或 netstat
?
lftp 默认对所有文件传输使用二进制模式,对目录列表使用 ascii 模式。所以二进制模式在这里应该不是问题。
也许您遇到了细微的连接问题,有时将 net:socket-maxseg 设置为较低的值(例如 500)会有所帮助。
问题:我正在尝试创建 public FTP 站点的本地镜像。当我使用 lftp
完成工作时,它创建了一个没有问题的镜像,但是当我几天后尝试更新镜像时,由于卡在几个文件上,它变得非常慢。
运行 lftp -d
我可以看到 lftp
向 RETR
文件发出了多个请求,但这些请求导致了多个 **** Timeout - reconnecting
消息,之后我看到大约 2-3 分钟
<--- 150 Opening BINARY mode data connection for {filename removed}.`
最后一条命令后,文件成功下载,lftp 继续进行。
从手册中我了解到 BINARY 是 lftp
的默认模式,但不知何故它似乎不适用于早期请求。有人可以建议我如何强制 lftp 始终打开二进制模式数据连接以下载所有文件吗?
这是一个 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
二进制模式的 ftp 命令是 bin
因此在 get
文件之前使用该命令。
cd /direc/tory; bin; get file.xml
问题是我看到了
---> TYPE I
<--- 200 Switching to Binary mode.
在你的输出中,所以你已经处于二进制模式。我想知道你是否有不同的问题?我还看到您正在使用被动模式 (PASV
),这很好,因为被动模式可以绕过防火墙和 NAT [1],所以我们需要另一个原因来解释为什么您会看到这些超时。
您是否还有其他线索,也许来自 ping
或 netstat
?
lftp 默认对所有文件传输使用二进制模式,对目录列表使用 ascii 模式。所以二进制模式在这里应该不是问题。
也许您遇到了细微的连接问题,有时将 net:socket-maxseg 设置为较低的值(例如 500)会有所帮助。