c# - 如何允许 .NET Core 控制台应用程序通过 Windows 防火墙进行 FTP 连接?

标签 c# .net .net-core ftp windows-firewall

我有一个 .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 文件,或者是否有其他方法可以执行此操作?预先感谢您的帮助!

最佳答案

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

默认情况下启用被动模式是有充分理由的。它使得通过防火墙的问题减少。

删除此行:

request.UsePassive = false;

阅读我关于 network configuration needed for FTP active and passive modes 的文章.

关于c# - 如何允许 .NET Core 控制台应用程序通过 Windows 防火墙进行 FTP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59380032/

相关文章:

c# - Linq:从多个表中选择一个预定义的实体

c# - oracle在linqpad中插入/删除问题

c# - wpf - 当未选择关联的单选按钮时,我应该如何自动将文本框变灰?

linux - 从 .net core Linux 调用 shell 命令的问题

c# - 在循环中使用 NUnit Assert 时,如何在错误消息中显示更多信息?

c# - 将 Windows 窗体单元测试迁移到 WPF

.net - 用正则表达式忽略大小写

c# - 无法通过 Windows 上的 Docker 访问 .Net Core 应用程序(本地主机)

c# - Azure Devops 上的 Nuget 还原失败,消息为 "unable to load the service index for source"

c# - Web 中的 SimpleInjector Singleton LifeStyle