【问题标题】:Windows firewall blocking ICMP port unreachable?Windows 防火墙阻止 ICMP 端口无法访问?
【发布时间】:2011-06-27 16:25:49
【问题描述】:

我正在尝试确定远程主机是否正在侦听特定的 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“端口不可达”,它在接收时报告为带有错误代码 WSAECONNRESET (10054) 的套接字异常。所有这些都是有道理的,但它只发生在 Windows 防火墙被禁用时。如果启用了防火墙——即使我对程序进行了例外处理——我也会得到 ErrorCode WSAETIMEDOUT (10060),可能是因为防火墙已经吃掉了 ICMP“无法访问的端口”。

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

谢谢...

【问题讨论】:

  • 可以使用 Windows 防火墙中的自定义规则来解决此问题,该规则将防火墙打开到 ICMP“无法访问的目标”消息(“无法访问的端口”是一种“无法访问的目标” - 类型 3,代码 3)。但要做到这一点,您必须将规则应用于所有程序,而不仅仅是实现 SendTo / ReceiveFrom 测试的可执行文件。

标签: c# udp windows-firewall


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2019-04-07
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多