我尝试从通过 SOCKS5 代理 (ssh -D) 连接的 FTP 服务器检索文件夹。配置 Firefox (v20、v22) 以使用 SOCKS5 代理时,我可以毫无问题地浏览 ftp 服务器的内容。但是,我需要下载的是一个包含大量内容的文件夹,而 Firefox 用户界面仅提供单个文件下载,这在这种情况下很麻烦。因此,我尝试使用被动模式使用 filezilla 连接到此 ftp 服务器,一切正常,直到 filezilla 发出 MLSD 命令,此时 ftp 服务器没有响应。
Status: Connecting to XXX through proxy
Status: Connecting to 127.0.0.1:9999...
Status: Connection with proxy established, performing handshake...
Status: Connection established, waiting for welcome message...
Response: 220 ProFTPD 1.3.4a Server (TiNT) [::X]
Command: USER anonymous
Response: 331 Authentification anonyme OK, envoyez votre adresse de courriel complète comme mot de passe
Command: PASS **************
Response: 230 Accès anonyme autorisé, application des restrictions
Command: SYST
Response: 215 UNIX Type: L8
Command: FEAT
Response: 211-Features:
Response: LANG fr-FR.UTF-8*;fr-FR
Response: MDTM
Response: MFMT
Response: TVFS
Response: UTF8
Response: MFF modify;UNIX.group;UNIX.mode;
Response: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
Response: SITE MKDIR
Response: SITE RMDIR
Response: SITE UTIME
Response: SITE SYMLINK
Response: REST STREAM
Response: SITE COPY
Response: SIZE
Response: 211 Fin
Command: OPTS UTF8 ON
Response: 200 UTF-8 activé
Status: Connected
Status: Retrieving directory listing...
Command: CWD Y
Response: 250 Commande CWD exécutée avec succès
Command: PWD
Response: 257 Y" est le répertoire courant
Command: TYPE I
Response: 200 Type paramétré à I
Command: PASV
Response: 227 Entering Passive Mode (X,224,74).
Command: MLSD
Status: Connecting to 127.0.0.1:9999...
Status: Connection with proxy established, performing handshake...
Error: Connection timed out
Error: Failed to retrieve directory listing
使用 wireshark 嗅探 Firefox 告诉我 Firefox 使用 LIST 而不是 MLSD 作为第一个命令,但我找不到专用的 ftp 客户端嗅探器给我一个由 Firefox 使用的命令的干净列表,而且我不知道在 wireshark 中要查看什么。
关于如何使 filezilla 工作,您有什么想法吗?在 wireshark 中查找什么可以尝试了解 firefox 和 filezilla 的行为差异?
(我不是 ftp 服务器的管理员,所以我无法查看其日志/更改其配置。此 ftp 服务器与我通过 ssh -D 进入的计算机位于同一子网中。
答案1
您应该检查 Firefox 是否使用主动模式 ( PORT
) 或被动模式 ( PASV
)。它应该是,PASV
如果PORT
使用,数据连接很可能在代理连接之外完成。
在给定的示例中,服务器/代理回复了 ,PASV
其X,224,74
转换为X:57418
(224 * 256 + 74)。您应该检查通过代理的连接是否正确转发,因此您应该看到从代理/隧道的另一端到 X、端口 57418 的连接请求 - 您可以在tcpdump
那个端进行检查。
LIST
和之间的唯一区别MLSD
是目录列表格式。LIST
基本上是自由格式的文本,解析起来很麻烦,而是MLSD
一种明确定义的格式,适合机器解析。
我进行了本地测试,在 FileZilla 3.5.3(相当旧的版本)中运行并配置端口ssh -D 12345 localhost
上的通用代理。连接成功。localhost
12345
ftp.kernel.org
Status: Connecting to 127.0.0.1:12345...
Status: Connection with proxy established, performing handshake...
Status: Connection established, waiting for welcome message...
Response: 220 Welcome to kernel.org
Command: USER anonymous
Response: 331 Please specify the password.
Command: PASS **************
Response: 230 Login successful.
Command: SYST
Response: 215 UNIX Type: L8
Command: FEAT
Response: 211-Features:
Response: EPRT
Response: EPSV
Response: MDTM
Response: PASV
Response: REST STREAM
Response: SIZE
Response: TVFS
Response: UTF8
Response: 211 End
Command: OPTS UTF8 ON
Response: 200 Always in UTF8 mode.
Status: Connected
Status: Retrieving directory listing...
Command: CWD /pub
Response: 250 Directory successfully changed.
Command: PWD
Response: 257 "/pub"
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PASV
Response: 227 Entering Passive Mode (198,145,20,140,120,140).
Command: LIST
Status: Connecting to 127.0.0.1:12345...
Status: Connection with proxy established, performing handshake...
Response: 150 Here comes the directory listing.
Response: 226 Directory send OK.
Status: Directory listing successful