【问题标题】:C# Uploading a file to remote FTP is forbidden by Windows firewallC# 将文件上传到远程 FTP 被 Windows 防火墙禁止
【发布时间】:2017-06-22 15:38:14
【问题描述】:

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

但是当我要通过的时候

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

它总是会显示异常

无法从传输连接中读取数据:尝试失败 以访问权限禁止的方式访问套接字。

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

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

当前我的防火墙设置:

  • (入站)
    本地端口 3072,80,20,21,1023
    远程端口 3072,80,20,21,1023

  • (出站)
    本地端口 3072,80,20,21,1023
    远程端口 3072,80,20,21,1023

我的完整代码

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");
}

【问题讨论】:

  • 这里可能有一些相关信息:serverfault.com/questions/401304/… - 也可以尝试在该网站上提问,因为它看起来比 SO 更相关。
  • 如果您认为这只是防火墙问题,您的问题与 Stack Overflow 无关,请将其移至超级用户。 - 你必须向我们展示一些日志文件。还有更多你的代码!或者至少告诉我们您使用的是被动模式还是主动模式。
  • @MartinPrikryl 感谢您的提醒。现在我加上我的代码。除了异常消息,我没有任何其他日志。我可以将我的 FTP 代码设置为被动还是主动?
  • 我设置自定义端口3072后建立连接,因为我设置了client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12; - 那句话没有意义对我来说 - SslProtocols.Tls12 与端口 3072 的关系是什么?
  • 我设置了 3072 因为我看到了这个问题的答案stackoverflow.com/questions/28286086/…

标签: c# ftp upload windows-firewall


【解决方案1】:

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

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

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

详情见我在network setup for FTP protocol的文章。

【讨论】:

  • 他们使用被动的FTP服务器,现在我打开了入站本地端口1024~65535和出站远程端口21和20,但它仍然不起作用
  • 被动模式仅使用出站连接。打开入站本地端口 1024~65535 没有意义。
  • 我不明白你的评论。
  • 我发现如果我只在 Windows 防火墙中关闭专用网络,并在入站和出站中启用 FTP 策略,那就可以了。
【解决方案2】:
  • 打开管理员命令提示符。单击开始,单击所有程序,单击附件,右键单击命令提示符,然后单击以管理员身份运行。

  • 运行以下命令:

1.netsh advfirewall防火墙添加规则名称=”FTP服务”action=allow service=ftpsvc协议=TCP dir=in

2.netsh advfirewall 设置全局 StatefulFTP 禁用

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

【讨论】:

  • 这对 TLS/SSL 加密连接没有帮助。防火墙无法检查加密连接。 + 即使链接断开,您的回答也必须独立工作。因此,请将该命令包含在您的答案中。
  • 但这不是你的问题。您的回答至少应该提到您放弃了安全性。没有这些信息,答案是错误的。
【解决方案3】:

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

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

【讨论】:

  • 我无法设置远程 FTP,我只是想我的防火墙中可能设置了一些策略来阻止它
  • 我问过他们,他们使用的是被动的 FTP 服务器,现在我打开了入站本地端口 1024~65535 和出站远程端口 21 和 20,但还是不行
猜你喜欢
  • 2023-03-08
  • 2019-04-07
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
相关资源
最近更新 更多