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

本文关键字:列表 FTP 防火墙 | 更新日期: 2023-09-27 18:01:54

我试图获得一个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上启用了所有传入/传出流量,但这不起作用,所以我允许所有端口的所有流量传入/传出,这起作用了。但是,像这样开放每个端口并不是一个可行的解决方案:)

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

我不认为这真的适合StackOverflow,因为这个问题更适合于Windows Server 2008 R2的安全配置。但是,在光中,我测试了您的代码,它工作得很好,所以您需要为服务器上所需FTP端口的FTP访问设置Windows防火墙例外。否则,Windows防火墙确实会阻止来自客户端的传入连接。如果打开防火墙例外不能解决问题,那么您将需要调查服务器上的其他安全配置问题。

我终于想通了。需要在Windows防火墙中围绕w3p进程创建自定义入站流量规则。下面是一个演练。

在入方向流量中新建规则选择自定义

选择"此程序路径"

找到w3wp.exe服务(通常在Windows'System32文件夹中)

单击自定义

选择" Apply to services only "

修改协议类型为TCP

将本地和远程端口设置为"所有端口"(您可以尝试将其缩小到只有端口21,但这并不总是有效,特别是异步上传)

为本地IP地址选择任意IP地址(如果知道本地IP地址范围,则选择一个范围)

为远程IP地址选择"这些IP地址",单击"添加"。输入要上传的FTP站点的IP地址

添加FTP IP地址后单击OK,然后单击Next

选择允许连接

将规则应用于域、私有和公共

名称为"允许从21端口传入的TCP w3wp.exe流量"

单击finish