【发布时间】:2017-09-21 11:09:10
【问题描述】:
在我的 C# 项目中,我包含了 ChilkatDotNet2.dll 以连接到 SFTP 服务器。目前,我尝试实现一个简单的连接方法,如下所示:
Chilkat.Ftp2 F = null;
F = (Chilkat.Ftp2)new Chilkat.Ftp2();
F.Hostname = "sftp.domain.com";
F.Username = "username";
F.Password = "password";
F.Port = 22;
F.AuthTls = true;
if (!(F.Connect())) {
MainFrm.set_AlertMessage(F.ConnectFailReason);
}
它总是无法连接,我总是收到错误 200,这意味着
已连接,但未能从 FTP 服务器接收问候语。
根据 Chilkat 文档。
我错过了什么?我试图连接到一个简单的 ftp 服务器测试(没有 SSL/TLS)并且它连接正确,所以我认为我遗漏了一些东西。 当我尝试使用 Filezilla 连接到 SFTP 服务器时,我获得的凭据是正确的。 谢谢。
更新
Chilkat.SFtp v_SFTP = null;
v_SFTP = (Chilkat.SFtp)new Chilkat.SFtp();
if (v_SFTP.Connect("sftp.domain.com", 22) {
if (v_SFTP.AuthenticatePw("username", "password")) {
IDVariant v_SUCCESS = null;
bool v_SUCCESS = v_SFTP.InitializeSftp();
}
}
else {
MainFrm.set_AlertMessage(v_SFTP.LastErrorText);
}
【问题讨论】:
-
200 已完成,表示您的连接良好。所以服务器没有发送问候语。也许服务器没有发送问候语。当您使用 Filezilla 登录时,您收到了问候吗?
-
我会使用像 wireshark 或 fiddler 这样的嗅探器来捕获 ChilkatDotNet2 和 Filezilla 的连接。我认为您缺少 http 标头,但不确定。
-
@jdweng:感谢您的友好回复。我正在尝试执行您向我建议的操作,但似乎 fiddler 无法从运行 .NET 代码的 Web 应用程序或 FileZilla 捕获任何有关 FTO 的信息。无论如何,我(必须)在部署之前使用 Cassini 在本地测试 Web 应用程序。这可能是问题吗?
-
FTP 使用 TCP 作为传输层。 WebBrowsers 具有使用 FTP 的能力。您正在使用使用 SCTP(流控制传输协议)的安全版本 SFTP(端口 22)。既然你得到了 200,这一切都没有真正的区别。通常,当您登录 FTP 站点时,通常会显示欢迎消息。您没有收到欢迎消息。服务器可能没有发送欢迎消息。你至少应该得到一个提示。有时您必须发送返回以获得欢迎消息。我怀疑发送了错误的回报(cr vs crlf)。