使用“ftps”前缀连接到FTP服务器

时间:2015-08-12 18:10:46

标签: c# .net ftp sftp ftps

此时我已经耗尽了所有资源,所以我来寻求帮助。

我有一个客户端给了我一个用户名和密码到他们的ftp网站。但是,要在网络上访问它,请使用https://ftps.sitename.com

要在FileZilla上访问,我可以使用ftps://或sftp://

我的问题是我不知道在程序中访问它需要做些什么。

现在我有了这段代码:

var ftpFilePath = @"ftp://ftps.sitename.com/file.txt";
var request = (FtpWebRequest)WebRequest.Create(ftpFilePath);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredentials(username, pass);
// enable SSL?

var response = (FtpWebResponse)request.GetResponse();
// Other code

它目前在GetResponse上失败,错误是它无法连接到远程服务器。如果我使用“ftps://ftps.sitename.com”,那么我会收到一个抱怨前缀的错误。

这是我第一次处理这类问题,我一定错过了一些小事。非常感谢任何帮助。

编辑:

我最终使用了WinSCP软件包,并遵循了本教程:https://winscp.net/eng/docs/library_session_getfiles

我遇到的两个问题是我没有ssh密钥,因此我暂时设置

GiveUpSecurityAndAcceptAnySshHostKey = true

然后我遇到了一个小问题,即确保运行VS的进程可以访问我尝试将文件写入的路径。

2 个答案:

答案 0 :(得分:1)

FTPS有两种类型:隐式和显式。它们不兼容。

默认情况下,隐式FTPS使用端口990,只假设一切都是从一开始就是SSL / TLS,而显式FTPS在普通FTP中连接到端口21,然后在发送AUTH命令时切换到SSL / TLS。

FileZilla对隐式FTPS使用前缀'ftps',对显式FTPS使用'ftpes',因此如果它在FileZilla中使用ftps://则表示服务器支持隐式FTPS。 .NET可能将ftps://解释为显式FTP,因为它是FTPS的“现代”形式(隐式FTPS是遗留的)。

所以这可能是你的问题。您可能正尝试使用客户端代码(在.NET中)连接到端口990上的传统(隐式)FTPS服务器,该代码假定端口21上具有“现代”FTPS。

可能没有一个简单的解决方案,因为我认为WebRequest既不支持隐式FTPS也不支持SFTP。除非您可以让服务器管理员添加对显式FTPS的支持,否则您可能必须使用专用的FTPS客户端,例如我支持隐式FTPS的edtFTPnet/PRO开发人员之一。< / p>

我希望有所帮助。

答案 1 :(得分:-1)

在您的项目中,将目标框架设置为4.5.2或更高版本

设置安全协议以使用tls1.2:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;