防火墙阻止UDP消息,尽管端口例外

时间:2012-12-16 21:39:48

标签: c# .net sockets udp firewall

我在基于C#.NET套接字的应用程序的发送端运行此代码:

const int port = 1110;
System.Net.Sockets.UdpClient udp = null;

udp = new System.Net.Sockets.UdpClient(host, port);
...
byte[] data = m.Serialize();
udp.Send(data, data.Length);

我在接收端运行此代码:

System.Net.IPEndPoint replyAddress = new System.Net.IPEndPoint(
    System.Net.IPAddress.Any, port);
while ((udp != null) && (udp.Available > 0))
{
   ...
}

我在UDP端口1110上的接收端添加了(Windows 7)防火墙例外。但是,接收方代码永远不会进入while循环,除非我完全禁用了防火墙。为什么端口1110异常没有生效?使用Microsoft网络监视器,我可以看到尝试使用UDP:SrcPort = 1082, DstPort = 1110, Length = 11之类的描述进入端口1110的消息(我认为网络监视器可以看到本地网络上的所有消息,而不仅仅是那些通过防火墙并且发往本地系统),但除非我完全禁用防火墙,否则我的应用程序永远不会收到它们。

我如何弄清楚这里发生了什么或修复它?我可以在循环中设置一个断点,并让另一方发送数据,当我禁用防火墙时,我点击断点,所以我知道流量可以通过,但防火墙的一些东西正在阻止它。我的防火墙异常如下所示:

常规

  • 已启用:正确
  • 操作:允许连接

计划和服务

  • 所有符合指定条件的程序
  • 适用于所有计划和服务

计算机

  • (未选中且为空)仅允许来自这些计算机的连接
  • (未选中且为空)跳过此规则以获取来自这些计算机的连接

协议和端口

  • 协议类型:UDP
  • 协议号:17
  • 本地端口:特定端口
  • 港口:1110
  • 远程端口:所有端口

范围

  • 本地IP地址:任意IP地址
  • 远程IP地址:任何IP地址

高级

  • 指定此规则适用的配置文件:域,私人,公共(全部已选中)
  • 边缘遍历:允许边缘遍历

用户

  • 授权用户:(未选中且为空)仅允许来自这些用户的连接
  • 例外:(未选中且为空)对于来自这些用户的连接,请跳过此规则

1 个答案:

答案 0 :(得分:1)

在进一步搜索防火墙规则后,我发现还有另一条规则是根据路径明确阻止接收程序。当Windows弹出一条关于想要访问网络的程序的消息时,我想你必须小心你的回应方式。我打算暂时禁止访问或取消操作(我当时还没打算运行程序)。但是,一旦我的回复,Windows添加了一个规则来永久阻止该程序的所有访问。删除这些规则允许UDP通信按预期通过防火墙。