FluentFTP使用EPSV经HTTP代理上传文件时报425无法打开数据连接错误
故障原因
- Implicit FTPS数据连接未完成TLS握手:你使用的是990端口的隐式FTPS服务,所有连接包括数据传输连接都需要先完成TLS1.2握手才能交互指令。对比日志可见FileZilla建立代理连接后会执行TLS握手,而你的FluentFTP日志中缺少该步骤,直接发送STOR指令被服务端拒绝返回425错误。
- 组件版本bug:旧版本
FluentFTP.HttpProxy扩展包存在已知缺陷,EPSV模式下隐式FTPS的数据连接不会自动发起TLS握手,代理连接建立后直接传输明文指令被服务端拦截。 - 路径格式兼容性问题:部分FTP服务端不支持STOR命令携带绝对路径,FluentFTP直接发送
STOR /test.csv,而FileZilla是先切换到根目录后发送STOR test.csv相对路径,也可能触发服务端限制。
解决方案
- 优先将
FluentFTP和FluentFTP.HttpProxy升级到最新正式版,官方已修复隐式FTPS下被动数据连接的TLS握手问题。 - 新增被动连接配置项,补充代码如下:
using (FtpClientProxy client = new FtpClientHttp11Proxy(new ProxyInfo() { Host = "prox.corp.company.com", Port = 80, Credentials = new NetworkCredential("proxyuser", "password")})) { client.Host = "1.123.123.123"; client.Port = 990; client.Credentials = new NetworkCredential("ftpuser", "password"); client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; client.DataConnectionType = FtpDataConnectionType.EPSV; client.EncryptionMode = FtpEncryptionMode.Implicit; // 新增配置:强制开启数据连接加密 client.DataConnectionEncryption = true; // 新增配置:关闭多线程数据连接避免代理上下文丢失 client.EnableThreadSafeDataConnections = false; // 如果确认FTP数据连接IP和控制连接IP不一致,手动指定数据连接IP // client.PassiveHost = "FTP数据连接实际IP"; client.Connect(); // 先切换到目标目录,使用相对路径上传 client.SetWorkingDirectory("/"); client.UploadFile(@"C:\test.csv", "test.csv"); }
内容的提问来源于stack exchange,提问作者Nagelfar
相关产品推荐
相关产品推荐

