gpt4 book ai didi

c# - 用于 C# 的基于 SSL 的 FTP

转载 作者:行者123 更新时间:2023-11-30 12:37:19 30 4
gpt4 key购买 nike

我正在使用下面的代码(需要是 .Net 2.0)在 UAT 服务器上连接到客户 FTP 服务器以上传/下载文件。我需要使用他们提供的自签名证书通过端口 990 进行连接。我已修改防火墙规则以允许从我们的 UAT 服务器连接到端口 990 上的 URI。

但是 (! :) ) 我在线上超时

 Stream requestStream = request.GetRequestStream();

如果我增加超时时间,它没有任何区别。

我在网上浏览了一下,但没有发现代码中明显遗漏的任何内容。

如果我使用 CuteFTP 连接到 UAT 服务器,自然地,它连接正常,我可以手动进行文件传输。如果我使用 WireShark 查看网络流量,它会从 FTP 服务器获得响应,但从不为用户 ID 和密码(用于代码)进行握手,但通过 CuteFTP,所有网络流量都正常。

我在检查证书的地方强制返回 True。


private void button4_Click(object sender, EventArgs e)
{
try
{
string completeFTPPath = ConfigurationManager.AppSettings["FTPPath"];
// get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(completeFTPPath);
request.EnableSsl = true;
request.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["FtpUserName"], ConfigurationManager.AppSettings["FtpPassword"]);
request.Method = WebRequestMethods.Ftp.UploadFile;

ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertifications;

// read file into byte array
StreamReader sourceStream = new StreamReader(ConfigurationManager.AppSettings["LocalFilePath"]);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;

// send bytes to server
MessageBox.Show("GetRequestStream() start");
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
MessageBox.Show("GetRequestStream() end");

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
MessageBox.Show("Response status: " + response.StatusDescription);
}
catch (WebException we)
{
MessageBox.Show(we.Message);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}

}

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{ return true; }

例如FTPPath-ftp://111.222.333.444:990/UAT/testFile.zip ;FtpUserName - 用户ID;FtpPassword = userPwd;LocalFilePath - c:\temp\testFile.zip

有人有什么想法吗?因为有些人似乎可以使用上述代码。 TIA。

最佳答案

在端口 990 上,服务器很可能支持 implicit FTPS ,而不是更标准的显式 FTPS。可能是 FtpWebRequest 不支持隐式 FTPS(我不知道)。

如果是这样,请查看 edtFTPnet/PRO ,它同时支持隐式和显式 FTPS,以及 SFTP。

关于c# - 用于 C# 的基于 SSL 的 FTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1355341/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com