我如何允许通过Windows防火墙的.NET Core控制台应用程序FTP连接?

问题描述 投票:5回答:3

我有一个.NET Core控制台应用程序,该应用程序从FTP服务器下载文件并进行处理。我将应用程序移动到新服务器上,但它停止工作。在新服务器上禁用Windows防火墙可以解决此问题,但是显然我不想让它处于打开状态-我需要一种有针对性的方式来启用此应用程序。默认防火墙规则似乎已经允许FTP通信(入站和出站),所以我不知道可以打开哪些其他端口(我认为我正在使用活动的FTP,它可以使用广泛的端口范围AFAIK)。我希望将应用程序列入白名单,但它不是.exe文件,因此我不确定要允许哪个应用程序。

我使用.bat文件的快捷方式运行该应用程序。 bat文件仅包含以下行:

dotnet "C:\path\my-application.dll"

应用程序失败的代码是:

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpServerUri);
request.UseBinary = true;
request.Credentials = new NetworkCredential(ftpUser, ftpPsw);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Proxy = null;
request.KeepAlive = false;
request.UsePassive = false;

// hangs here forever unless Windows Firewall is turned off
FtpWebResponse response = (FtpWebResponse)await request.GetResponseAsync();

是否可以允许应用程序通过防火墙?是否允许dotnet.exe或.bat文件或.dll文件,还是有其他替代方法?预先感谢您的帮助!

c# .net-core ftp windows-firewall
3个回答
1
投票

您可以在Win10上尝试两件事:

  • 允许通过Windows防火墙的应用程序

导航路径:控制面板\所有控制面板项目\ WindowsDefender防火墙\允许的应用程序

点击允许其他应用

在下面的弹出窗口中,提供dotnet.exe的绝对路径

  • 使用以下功能配置具有高级安全性的Windows Defender防火墙

导航路径:控制面板\所有控制面板项目\ WindowsDefender防火墙\高级设置

编辑:

发现白名单确实可以解决问题。


2
投票

不使用FTP活动模式。而且您不会遇到防火墙问题。

默认情况下,启用被动模式是有原因的。这样可以减少通过防火墙的麻烦。

删除此行:

request.UsePassive = false;

阅读我在network configuration needed for FTP active and passive modes上的文章。


0
投票

我可能在这里找到了答案:

https://serverfault.com/questions/401304/active-ftp-client-blocked-by-windows-firewall-on-windows-7

基本上,解决方案是转到防火墙高级设置,然后创建一个新的入站规则。选择Custom Rule。我将其应用于All Programs(因为我仍然不知道如何选择.Net Core应用)。我使用的协议类型为:TCP,本地端口:All Ports和远程端口:Specific Ports 20

想法是您在TCP端口20上启动连接,然后将入站流量指向某个任意端口,但是由于远程端口是TCP端口20,因此您可以确定它是FTP响应因此,您无需打开大量的本地端口,而是打开所有本地端口,但只打开一个远程端口。

如果有人有一个答案可以帮助我允许整个应用程序,我将保留此权限,否则,这是一个足够好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.