【发布时间】:2021-12-24 04:56:43
【问题描述】:
几周前,我在 aws windows 中设置了一个 ftp 服务器。 当我尝试使用 WebRequestMethods.Ftp.DownloadFile 在 ftp 服务器中下载文件时; ,它没有工作。 但是当我尝试使用 WebRequestMethods.Ftp.ListDirectory 从 ftp 服务器获取文件列表时,它确实有效! 我尝试用被动模式下载文件,所以我想在被动模式下会不会有问题,所以我用filezilla连接被动模式的ftp服务器。它确实运作良好。我可以在 ftp 服务器中看到文件列表和上传/下载文件。所以我认为被动模式至少运作良好,这可能不是问题。
这是我尝试从 ftp 服务器下载文件时收到的错误消息
System.Net.WebException:服务器返回错误:501 参数数量无效。
总是这条消息。
这是我为 ftp 下载连接编写的部分代码。
FtpWebRequest requestFTPUploder = (FtpWebRequest)WebRequest.Create(FTP_Address);
requestFTPUploder.UsePassive = true;
requestFTPUploder.Method = WebRequestMethods.Ftp.DownloadFile;
requestFTPUploder.Credentials = new NetworkCredential(User_Name, Password);
“FTP_Address”是用于连接的 ip v4 地址。我没有为我的 ftp 服务器设置 DNS 并且它适用于获取列表(WebrequestMethods.Ftp.ListDirectory) 我添加了 ':20' 和 ':21' 用于选择特定端口号。它也适用于获取文件列表。 请帮忙。我为此苦苦挣扎了好几个星期。
**如果我写错了,对不起。这是我第一次在 stackoverflow 中实际写一些东西。我总是阅读别人的问题。
【问题讨论】:
-
我会使用不同的 ftp 库作为开始。 FtpWebRequest 非常有限,当然还有更多的功能 lobs - 例如 edFTP 或 WinSCP 的包装器。无论 FWR 发送什么,服务器都不喜欢它。获取发送的确切命令,并提供来自 FileZilla 的调试日志,以便我们进行比较
-
通常当服务器将发送目录列表(通过端口 21 传输)但不会发送文件(通过随机选择的端口号传输,通常更高),这是因为火灾围墙。使用被动模式会有所帮助,因为它会反转方向;在正常情况下,服务器会为您提供一个端口并希望您连接到它。这可能是防火墙,所以被动地将它转过来并指示服务器连接到您(通常您对防火墙的控制比对服务器防火墙的控制更多)。现代路由器将看到 PASV 指令并动态地..
-
..创建一个端口转发以便连接可以工作(如果您的客户端已经完成了类似 PASV 192.168.3.12,12345 的操作,路由器会将其调整为您的公共 IP,然后使用该信息创建端口转发以便从服务器到您的连接将成功) - 这意味着被动模式通常与典型的家庭或办公室 NAT 样式网络更兼容,即使它们本身没有防火墙
-
All in,如果 FileZilla 工作并且您的代码不需要,我们需要查看两者发出的命令的日志,以便我们可以比较差异 - 如果您无法轻松获取日志FWR - 参见例如stackoverflow.com/questions/9664650/… - 然后切换到使用另一个更愿意提供日志的库;它甚至可能使问题消失
标签: c# networking ftp