C# で FtpWebRequest クラスを介して ftp/sftp を達成しようとしていますが、今まで成功していません。
サードパーティの無料または有料のdllを使用したくありません。
資格情報は次のようなものです
- ホスト名 = sftp.xyz.com
- ユーザー ID = abc
- パスワード = 123
IP アドレスを使用して ftp を実行できますが、資格情報を使用して上記のホスト名の sftp を実行できません。
sftp の場合、FtpWebRequest クラスの EnableSsl プロパティを true に有効にしましたが、リモート サーバーに接続できないというエラーが発生しました。
同じ資格情報とホスト名を使用して Filezilla に接続できますが、コードを使用することはできません。
filezilla を観察しました。テキスト ボックスでホスト名が sftp.xyz.com から sftp://sftp.xyz.com に変更され、コマンド ラインでユーザー ID が abc@sftp.xyz.com に変更されます。
コードで同じことをしましたが、sftp では成功しませんでした。
これについて緊急の助けが必要です。前もって感謝します。
以下はこれまでの私のコードです:
private static void ProcessSFTPFile()
{
try
{
string[] fileList = null;
StringBuilder result = new StringBuilder();
string uri = "ftp://sftp.xyz.com";
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(uri));
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
ftpRequest.EnableSsl = true;
ftpRequest.Credentials = new NetworkCredential("abc@sftp.xyz.com", "123");
ftpRequest.UsePassive = true;
ftpRequest.Timeout = System.Threading.Timeout.Infinite;
//ftpRequest.AuthenticationLevel = Security.AuthenticationLevel.MutualAuthRequested;
//ftpRequest.Proxy = null;
ftpRequest.KeepAlive = true;
ftpRequest.UseBinary = true;
//Hook a callback to verify the remote certificate
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
//ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append("ftp://sftp.xyz.com" + line);
result.Append("\n");
line = reader.ReadLine();
}
if (result.Length != 0)
{
// to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
// extracting the array of all ftp file paths
fileList = result.ToString().Split('\n');
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
Console.ReadLine();
}
}
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (certificate.Subject.Contains("CN=sftp.xyz.com"))
{
return true;
}
else
{
return false;
}
}