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方式不同?

FTP错误:202命令未实现

按照上面的建议启用网络跟踪,我能够找到问题的确切原因。

通过查看日志:

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;