UDP打孔超时

har*_*per 6 windows-firewall hole-punching

我需要实现UDP协议.PC必须在专用的UDP端口侦听传入的数据包.它还发送数据包(答案).该应用程序在Windows XP,7,8,....上运行

Windows防火墙阻止传入的数据包.这可以通过UDP打孔来规避.所以我必须发送一些不应该受伤的东西.但我想尽可能少打扰.

  • 如何在防火墙关闭之前确定超时?
  • 我可以检测到防火墙已关闭防火墙,以便我必须重新发送到打开数据包吗?当然,当防火墙关闭时我不会收到任何东西,但这可能还有其他原因.

har*_*per 1

回答我自己的问题:没有办法确定超时。您需要试验 Windows 7 防火墙对 UDP 连接使用哪种超时。当前的经验显示四秒超时,但这可能会有所不同。

打孔的一些一般技巧:

  1. 不要打扰网络中的任何其他主机。发送一个内容无害的数据包。
  2. 无需发送给您希望作为回复发送者的主机。
  3. 无需发送到您想要作为发送方的 UDP 端口。发送到任何 UDP 端口。有一个丢弃端口 (9),它应该忽略您发送的任何内容。
  4. 确保您的数据包确实已发送。如果您尝试发送到上次未见过的主机,IP 堆栈将使用 ARP 协议来获取 MAC 地址。如果 IP 堆栈没有收到 ARP 响应,则它无法发送 IP 数据包,也不会打洞。可以通过发送到网络广播地址来规避此问题。
  5. 确保使用正确的适配器的广播地址打通所需网络。