FTP错误:202命令未实现
本文关键字:实现 命令 错误 FTP | 更新日期: 2023-09-27 18:23:52
我遇到了一个非常令人沮丧的情况。我需要使用FTP从一些特殊的硬件中检索列表、删除和上传文件。我所有的发展都发生在一台插入神秘盒子的远程计算机上。据我所知,这个盒子是在嵌入式软件上运行的。我可以FTP到盒子的唯一方法是使用cmd并调用FTP.exe,传递ip并点击回车,回车,这意味着没有凭据。然后我可以做ls.put和delete。然而,我需要做一个dll,稍后将从hta/javascript gui调用,它将像这样使用:
var ftp = new ActiveXObject("Mission.FTP")
var list = ftp.ls(hostIP);
但是我尝试从C#中执行的任何操作都会返回以下错误:
远程服务器返回错误:202命令未实现。
失败的c#代码是:
FtpWebRequest request = CreateRequest(url, WebRequestMethods.Ftp.ListDirectory);
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
它在GetResponse()方法处失败。
FTP不是标准协议吗。为什么ftp.exe的结果会与C#的ftp方式不同?
按照上面的建议启用网络跟踪,我能够找到问题的确切原因。
通过查看日志:
System.Net Information: 0 : [9188] FtpControlStream#42866877 - Sending command [PASV]
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Send
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 50 41 53 56 0D 0A : PASV..
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Send() -> Int32#6
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Receive()
System.Net.Sockets Verbose: 0 : [9188] Data from Socket#52434070::Receive
System.Net.Sockets Verbose: 0 : [9188] 00000000 : 32 30 32 20 43 6F 6D 6D-61 6E 64 20 6E 6F 74 20 : 202 Command not
System.Net.Sockets Verbose: 0 : [9188] 00000010 : 69 6D 70 6C 65 6D 65 6E-74 65 64 2E 0D 0A : implemented...
System.Net.Sockets Verbose: 0 : [9188] Exiting Socket#52434070::Receive() -> Int32#30
System.Net Information: 0 : [9188] FtpControlStream#42866877 - Received response [202 Command not implemented.]
System.Net.Sockets Verbose: 0 : [9188] Socket#52434070::Dispose()
System.Net Information: 0 : [9188] FtpWebRequest#7224250::(Releasing FTP connection#42866877.)
System.Net Error: 0 : [9188] Exception in FtpWebRequest#7224250::GetResponse - The remote server returned an error: 202 Command not implemented.
这个问题的解决方案很简单:
request.UsePassive = false;