Windows XP防火墙阻止入站UDP数据包:Java程序或解决方法的编程异常?

时间:2012-01-01 03:07:38

标签: java udp windows-firewall

我有一个Java程序,它使用UDP数据包与网络上的其他程序通信。我注意到在我的Windows XP机器上,我无法接收入站数据包,经过一些研究,我发现是防火墙导致了这个问题。

有没有办法为Java程序添加防火墙例外?谷歌搜索没有透露任何信息。

我是否可以在安装时运行DOS shell命令来添加异常? (也无法在谷歌上找到任何东西。)

有没有办法以一种让Windows知道入境数据包被请求的方式解决它?例如,我发送一个广播包,然后其他系统响应。关于哪些端口用于广播以允许响应数据包,我可以做些什么?

我可以采用完全不同的方式接收回复吗?我仍然需要广播,因为这将在不一定拥有DNS的网络上运行,所以我不能依赖于像Zeroconf这样的东西(更不用说没有可用于Java的Zeroconf支持的事实)来发现网络上的其他机器。

感谢。

1 个答案:

答案 0 :(得分:3)

防火墙需要考虑三件事:

  1. 在防火墙中“打开”端口的最简单方法是让防火墙后面的程序向其对等方发送数据报。这(通常)创建一个临时规则,允许从对等方返回数据报到本地程序。但是,如果已授权本地程序在网络上进行通信,则Windows Vista和Windows 7将仅执行此操作。首次运行程序时,将出现一个对话框,询问是否允许它与网络通信。如果您点击“允许访问”以外的任何内容,则该程序将被永久阻止。

  2. 对于具有管理员权限的用户,最好的方法是手动打开程序正在侦听和/或发送的任何端口号。

  3. 即使您打开端口,某些防火墙仍可能阻止您的数据报。这可能是由于您的有效负载的前几个字节与防火墙不喜欢的某些模式相匹配而变得模糊不清。例如,Symantic Antivirus可能会阻止任何UDP 数据报的前几个字节是0x20 0x01 0x00 0x00,因为它假设这是一个Teredo隧道。同样,如果你的数据报只是路径MTU的几个字节,一些防火墙会看到一个小的IP片段并放下它以防止古老的DoS攻击向量。

  4. 我的建议是根据应用程序的需要在1或2之间进行选择,并尝试通过将每个数据报的前几个字节设置为常量并将数据报保持在1400字节以下来避免3。