C#中的防火墙和FTP目录列表

时间:2011-07-13 20:08:16

标签: c# ftp firewall

我正在尝试获取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上的所有传入/传出流量,但是没有工作,所以我允许所有端口的所有流量传入/传出并且工作正常。但是,打开像这样的每个端口都不是一个可行的解决方案:)

2 个答案:

答案 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流量”

点击完成