我正在尝试获取FTP站点的目录列表,但是在连接和检索列表时遇到问题。我认为问题出在Windows 2008 Server R2的Windows防火墙上。这是代码:
try
{
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1");
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.UsePassive = false;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("user", "pass");
request.Proxy = HttpWebRequest.DefaultWebProxy;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Label1.Text = reader.ReadToEnd();
reader.Close();
response.Close();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
我想知道需要打开哪些防火墙设置或端口才能执行此操作。我启用了端口21和20上的所有传入/传出流量,但是没有工作,所以我允许所有端口的所有流量传入/传出并且工作正常。但是,打开像这样的每个端口都不是一个可行的解决方案:)
答案 0 :(得分:0)
我认为这不适合StackOverflow,因为这个问题更适用于Windows Server 2008 R2的安全配置。但是,从根本上说,我测试了你的代码,它运行得很好,所以你需要在服务器上为所需的FTP端口制作一个Windows防火墙例外的FTP访问。否则,Windows防火墙确实会阻止来自客户端的传入连接。如果打开防火墙例外无法解决问题,那么您需要调查服务器上的其他安全配置问题。
答案 1 :(得分:0)
我终于明白了。您需要在w3p进程周围的Windows防火墙中创建自定义入站流量规则。这是一个演练。
在入站流量中创建新规则 选择自定义
选择“此计划路径”
找到w3wp.exe服务(通常在Windows \ System32文件夹中)
单击“自定义”
选择“仅应用于服务”
将协议类型更改为TCP
将本地和远程端口设置为“所有端口”(您可以尝试将其缩小到仅端口21,但这并不总是有效,尤其是异步上载时)
选择本地IP地址的任何IP地址(如果您知道本地IP地址范围,则选择范围)
为远程IP地址选择“这些IP地址”,然后单击“添加”。 输入您要上传的FTP站点的IP地址
添加FTP IP地址后,单击“确定”,然后单击“下一步”
选择允许连接
将规则应用于域名,私人和公共
名称为“允许来自端口21的传入TCP w3wp.exe流量”
点击完成