Windows防火墙阻止ICMP端口无法访问?

时间:2011-06-27 16:25:50

标签: c# udp windows-firewall

我正在尝试确定远程主机是否正在侦听特定的UDP端口号。我这样做(在C#中)如下:

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  int sent = socket.SendTo(bufsend, bufsend.Length, SocketFlags.None, endpoint);
  int recv = socket.ReceiveFrom(bufrecv, ref endpoint);

如果没有人在监听,我会得到一个ICMP“端口不可达”,它在接收时报告为带有ErrorCode WSAECONNRESET(10054)的套接字异常。所有这些都是有道理的,但它只发生在Windows防火墙被禁用时。如果防火墙已启用 - 即使我为程序例外 - 我得到ErrorCode WSAETIMEDOUT(10060),大概是因为防火墙已经吃掉了ICMP“端口不可达”。

有什么建议吗?我已经检查了防火墙的“高级安全性”设置,但无济于事。

...谢谢

1 个答案:

答案 0 :(得分:1)

请参阅上面的评论。您必须将打开防火墙的规则应用于所有程序的“目标无法访问”消息,而不仅仅是实现SendTo / ReceiveFrom测试的可执行文件。