【问题标题】:FTP special character in password?FTP密码中的特殊字符?
【发布时间】:2011-12-01 11:58:59
【问题描述】:

我正在尝试登录 ftp 服务器。在 C# 中使用以下代码。

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp-server");

request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
// This example assumes the FTP site uses anonymous logon.
//request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequired;
request.Credentials = new NetworkCredential("userName", "password!#£");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();

但是,当密码包含一些特殊字符时,登录失败。例如(“!”或“£”)?我得到以下异常。

Unhandled Exception: System.Net.WebException: The remote server returned an error: (530) Not logged in.
  at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
  at System.Net.FtpWebRequest.RequestCallback(Object obj)
  at System.Net.CommandStream.Dispose(Boolean disposing)
  at System.IO.Stream.Close()
  at System.IO.Stream.Dispose()
  at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
  at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Bo
ean canReuse)
  at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
  at System.Net.FtpWebRequest.GetResponse()
  at FtpClientTest.Program.FtpWebRequest() 

当密码不包含任何特殊字符时,我没有收到任何异常。

【问题讨论】:

  • 为什么要对密码进行 UTF-8 编码?如果你只是将它作为原生字符串传递会发生什么?
  • doesEncodeUTF8("xxxxxxx") 是否会返回转义的 ascii 字符串?试试这个可能会解决问题..Converting Unicode strings to escaped ascii string我已经探索了NetworkCredential Class的所有类,但都使用字符串类型密码,事件secureString也有相同的字符/字符串类型值..我同意@Joe您应该使用本机字符串类型的安全密码..
  • @Joe:我首先尝试了原生字符串,但它不起作用。然后我尝试使用同样不起作用的 UTF8 编码。
  • @Niranjan:我尝试了 EncodeNonAsciChars,但也没有用。
  • 跟踪 Ftp 日志以检查此问题是否与服务器或其他有关。检查此链接How to troubleshoot your System.Net code

标签: c# .net ftp ftpwebresponse


【解决方案1】:

它是什么 ftp 服务器?您可以使用其他程序登录吗?如果是,请使用wireshark 比较通过网络传输的内容。

所以可能只是ANSI编码,所以试试

var secureString = new SecureString();
foreach (var b in Encoding.Default.GetBytes("password!#£"))
    secureString.AppendChar((char)b);

request.Credentials = new NetworkCredential("userName", secureString);

【讨论】:

  • 我可以在 Windows 7 命令提示符下使用 ftp 命令登录
  • @Amitabh 更新了我的帖子,没有承诺,但我想值得一试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多