【发布时间】:2020-07-18 04:23:44
【问题描述】:
在远程 FTP 文件上使用 fopen 会导致
打开流失败:建立数据通道失败:连接被拒绝
使用 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 的问题?
【问题讨论】:
-
这看起来像XY problem。 FTP URL wrapper 使用被动模式。如果包装器连接对您不起作用,则问题可能与您想象的不同。 – 你得到了什么确切的错误?
-
我收到
failed to open stream: Failed to set up data channel: Connection refused。我怀疑的另一件事是密码转义,因为它包含一个感叹号。但我尝试了无数组合,但都没有奏效。 -
您可以访问服务器端日志吗?或者您可以对连接进行协议捕获吗?你用的是什么版本的PHP?
-
无法访问服务器日志。我从未做过任何协议捕获,但我可以尝试。使用 PHP 7.1.33
-
@MartinPrikryl 在启动 Wireshark 后看来你是对的。我相应地编辑了我的问题。