我在Windows Server 2008(IIS 7.5)上设置了一个FTP站点。启用匿名身份验证,而不启用基本身份验证。我添加了一个规则,允许所有匿名用户阅读。在端口21的绑定中,我已将testftp.com
指定为主机名。在hosts文件中我添加了一行
127.0.0.1 testftp.com
。现在,我尝试以两种方式访问它:
来自C#代码:
string ftpFilePath="ftp://testftp.com/sample.txt";
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpFilePath);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential("anonymous", "password@testftp.com");
这样我就会出现(530) Not logged in
错误。
现在,如果我从绑定和主机文件中删除主机名并使用IP地址访问它,我可以毫无问题地读取文件。是否有任何配置需要考虑才能使其正常工作?
答案 0 :(得分:1)
我说你误解了绑定设置的重点。
不是将主机名绑定到IP地址。
将FTP站点绑定到IP地址和主机名(单独)。
主机名框实际上与IP地址绑定无关。它允许您将多个FTP站点(实例)绑定到同一IP地址,但允许FTP服务器区分客户端想要连接的站点(类似于虚拟HTTP主机)。客户端需要使用HOST hostname
命令进行选择(类似于HTTP / 1.1 Host
标头)。
我相信FtpWebRequest
确实使用HOST
命令。因此,FTP服务器无法分辨您连接的FTP站点,因此无法通过身份验证。
您可以使用特殊(特定于IIS)的用户名语法"HOST|USERNAME"
来解决此问题。
但正如我在开头写的那样,我相信你实际上并不想将FTP站点限制为主机名。
如果清除主机名框,则FTP服务器不需要HOST
命令。
答案 1 :(得分:0)
虽然我不确定,但这似乎是那些愚蠢的IIS漏洞之一。我尝试在绑定中清除主机名并猜测它是什么,它有效。