奇怪的 PHP 的 FTP 包装器行为

fopen在远程 FTP 文件上使用会导致


无法打开流:无法设置数据通道:连接被拒绝


使用 Wireshark 将网络流量过滤到 FTP 我明白了


Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

Request: USER user

Response: 331 User user OK. Password required

Request: PASS password

Response: 230 OK. Current restricted directory is /

Request: TYPE I

Response: 200 TYPE is now 8-bit binary

Request: SIZE filename

Response: 213 28344

Request: EPSV

Response: 229 Extended Passive mode OK (|||25127|)

Request: RETR filename

以下是一些 DNS 查询,然后是这些 TCP 帧:


60662 → 25127 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=475196536 TSecr=0 WS=128

25127 → 60662 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

45764 → 21 [FIN, ACK] Seq=102 Ack=493 Win=64128 Len=0 TSval=475196552 TSecr=2527041209

不使用我得到的包装器


Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

Request: USER user

Response: 331 User user OK. Password required

Request: PASS password

Response: 230 OK. Current restricted directory is /

Request: PASV

Response: 227 Entering Passive Mode (89,31,148,62,184,87)

Request: TYPE A

Response: 200 TYPE is now ASCII

Request: RETR filename

Response: 150-Accepted data connection

Response: 226-File successfully transferred

Response: 226 Logout.

那么似乎是 EPSV 的问题?


函数式编程
浏览 79回答 1
1回答

慕码人2483693

Sooo 我想我的问题与https://bugs.php.net/bug.php?id=69580相同PHP 的 FTP 包装器使用 EPSV,同时ftp_pasv使用带有 IPv4 的 PASV。我尝试从中下载的服务器存在 EPSV 问题,包装器不会回退到 PASV,因此出现错误。可以要求服务器的管理员修复他们的设置,但在我的情况下,这只意味着我将无法使用包装器。
打开App,查看更多内容
随时随地看视频慕课网APP