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

问题描述 投票:1回答:2

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

我有一个客户端给了我一个用户名和密码到他们的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的进程可以访问我试图写入文件的路径。

c# .net ftp sftp ftps
2个回答
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开发人员之一。

我希望有所帮助。


-1
投票

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

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

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
© www.soinside.com 2019 - 2024. All rights reserved.