绑定UDP数据包中的Windows XP防火墙阻塞:Java程序的编程异常还是解决方案?

绑定UDP数据包中的Windows XP防火墙阻塞:Java程序的编程异常还是解决方案?,java,udp,windows-firewall,Java,Udp,Windows Firewall,我有一个Java程序,它使用UDP数据包与网络上的其他程序通信。我注意到在我的Windows XP机器上,我无法接收绑定的数据包,经过一些研究,我发现是防火墙造成了问题 有没有办法为Java程序添加防火墙例外?谷歌搜索没有透露这方面的任何信息 是否有可以在安装时运行的DOS shell命令来添加异常?(在谷歌上也找不到这方面的信息。) 有没有一种方法可以解决这个问题,让Windows知道请求了绑定的数据包?例如,我发送一个广播包,然后其他系统响应。关于广播使用哪些端口允许响应数据包,我能做些什么

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

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

是否有可以在安装时运行的DOS shell命令来添加异常?(在谷歌上也找不到这方面的信息。)

有没有一种方法可以解决这个问题,让Windows知道请求了绑定的数据包?例如,我发送一个广播包,然后其他系统响应。关于广播使用哪些端口允许响应数据包,我能做些什么

有没有一种完全不同的方式可以让我接受回复?我仍然需要广播,因为这将在甚至没有DNS的网络上运行,所以我不能依赖Zeroconf(更不用说Java没有良好的Zeroconf支持)来发现网络上的其他机器


谢谢。

防火墙有三件事要考虑:

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

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

  • 即使你打开了一个端口,一些防火墙仍然会阻止你的数据报。这可能是由于一些模糊的东西造成的,比如负载的前几个字节恰好与防火墙不喜欢的模式匹配。例如,Symantic Antivirus可能会阻止任何UDP
    其前几个字节为
    0x20 0x01 0x00 0x00
    的数据报,因为它假定这是Teredo隧道。同样,如果你的数据报只是路径MTU的几个字节,一些防火墙会看到一个小IP片段,并丢弃它来防止一个古老的DoS攻击向量。


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

    您不知道整个过程发生在哪个端口上吗?如果有防火墙,你什么都做不了。你可以把防火墙看作是一条断线。另外,自己修改防火墙设置(需要以管理员身份运行)也是一个非常糟糕的主意。对于接收端口号,我可以静态分配一个,或者让操作系统决定并将该信息在广播包中传递给远程机器。所以,我想我可以通知防火墙一个特定的端口,但我想知道所有其他程序是如何在不涉及用户的情况下配置这个端口的。我认为最简单的答案是找到一种方法让Windows知道即将到来的数据包是被请求的。如果我要建立一个输出TCP连接,那么相同连接的输入数据包就可以正常工作。不幸的是,输出数据包必须是UDP,因为它必须进行广播(而TCP尝试可能有数百次)。我是否可以使用面向连接的数据报协议?