You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

goftp调用List返回229 Entering Extended Passive Mode后挂起

问题原因

挂起故障和防火墙无关,核心原因是vsFTPd 3.0.3默认开启require_ssl_reuse配置,要求FTP的数据传输连接必须复用控制连接的TLS会话。你当前代码的TLS配置未开启会话缓存,无法满足服务端的会话复用要求,导致数据连接请求被服务端静默丢弃,程序卡在EPSV响应后的连接建立阶段。
FileZilla客户端默认支持TLS会话复用,因此可以正常访问同一台服务器。

修复方案

修改TLS配置段,添加客户端会话缓存配置,支持TLS会话复用即可解决问题,修改后的Dial初始化代码如下:

c, err := ftp.Dial(
    os.Getenv("ftpserver"),
    ftp.DialWithExplicitTLS(
        &tls.Config{
            InsecureSkipVerify: true,
            // 新增TLS会话缓存配置,支持会话复用
            ClientSessionCache: tls.NewLRUClientSessionCache(0),
        },
    ),
    ftp.DialWithDebugOutput(os.Stdout),
    ftp.DialWithTimeout(5*time.Second),
)

注意:使用tls.NewLRUClientSessionCache需要提前导入crypto/tls包。

如果添加上述配置后仍存在兼容问题,可以追加禁用扩展被动模式的配置,强制使用传统PASV模式建立数据连接:

ftp.DialWithDisabledEPSV(true)

将该配置项传入ftp.Dial的参数列表即可。

调试日志停在229 Entering Extended Passive Mode (|||7339|)属于符合逻辑的现象:客户端收到EPSV响应后会解析出服务端开放的7339数据端口,随后发起数据连接,因为会话复用校验失败连接被服务端直接丢弃,客户端会一直等待直到连接超时,因此没有后续日志输出。

内容的提问来源于stack exchange,提问作者samoorai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:39:37