Windows 防火墙禁止 C# 上传文件到远程 FTP

C# Uploading a file to remote FTP is forbidden by Windows firewall

我使用 C# FtpClient 库上传文件。在我设置自定义端口3072后建立连接,因为我设置了client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

但是当我要经历的时候

client.GetFilePermissions("/Test.txt");
client.UploadFile(@"C:\Users\Desktop\Test.txt", "/Test.txt");

总是显示异常

Unable to read data from the transport connection: An attempt was made to access a socket in a way forbidden by its access permissions.

如果我关闭Windows防火墙,文件可以成功上传。

我想知道我应该在 Windows 防火墙上设置什么策略以允许我访问远程文件并上传它。

当前我的防火墙设置:

我的完整代码

FtpClient client = new FtpClient();
client.Host = "xx.xx.xx.xx";
client.Credentials = new NetworkCredential(UserName, Password);
client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;

client.Connect();
if (client.IsConnected)
{
    Console.WriteLine("Connected");
    client.DataConnectionEncryption = true;
    var resutl = client.GetFilePermissions("/Test.txt");
    client.UploadFile(@"C:\Users\Desktop\Test.txt", "/Test.txt");
}
else
{
    Console.WriteLine("No Connetion");
}

它是被动 FTP 服务器吗?如果是这样,您可能需要打开端口范围,如下所述:

https://technet.microsoft.com/en-us/library/083f7757-ad9f-421a-9cde-7a053f3de9a6

如果您确实阻止了所有 outbounds/inbound 端口,除了列出的端口,FTP 几乎无法工作。

FTP协议使用单独的传输连接端口范围,outbound(推荐被动模式)或inbound(主动模式)。

要设置被动模式,您必须找出 FTP 服务器使用的端口范围,并在防火墙中启用它。

详情请看我在network setup for FTP protocol上的文章。

  • 打开管理员命令提示符。依次单击“开始”、“所有程序”、“附件”,右键单击“命令提示符”,然后单击“运行 管理员身份”。

  • 运行以下命令:

1.netsh advfirewall firewall add rule name=”FTP Service” action=allow service=ftpsvc protocol=TCP dir=in

2.netsh advfirewall set global StatefulFTP disable

https://technet.microsoft.com/en-us/library/dd421710(v=WS.10).aspx