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