Java7防止在 WindowsVista 和7上的 FTP 传输,如果防火墙是开着的。有什么办法吗?

Java7阻止 WindowsVista 和7上的 FTP 传输。

在 FTP 中,在传输文件之前必须发送一个 PORT 或 PASV 命令。一旦其中一个命令被发送,Windows 防火墙就会关闭发送命令的套接字。只有当防火墙打开且不存在 java.exe 异常时才会发生这种情况。我怀疑这个问题与 Java7使用新的 Vista IP 协议栈有关。

有人知道怎么解决这个问题吗?我们正在分发一个 JavaFTP 库,所以我们显然不能自己添加异常。

例外:

java.net.SocketException: Permission denied: recv failed

JRE 版本信息:

java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

跟进1(2011年11月14日) : 甲骨文已经分析了这个问题,发现这似乎是 Windows 防火墙和/或 IPv6协议栈中的一个 bug。他们设法用一个本地 C (即非 Java)应用程序复制了这个问题,所以这是这个 bug 不在 Java 中的有力证据。他们已经通知了微软,所以现在球在他们的法庭上。更多详细信息可以访问 href = “ http://bugs.sun.com/bugdatabase/view _ bug.do? bug _ id = 7077696”> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

跟进2(2012年7月27日) : 甲骨文的一位(非常有帮助的)联系人告诉我,这个问题在微软已经升级。我们希望尽快看到结果。

跟进3(2012年8月15日) : 我们在甲骨文的联系人告诉我们,微软已经接受了这个错误,并且正在优先考虑它。

跟进4(2012年9月21日) : 微软发布了一个补丁,目前正在由 Oracle 测试。发布日期没有任何消息。

跟进5(2012年10月11日) : 终于成功了!微软公开发布了 修复程序。他们暗示,修复程序将包括在未来的一般软件更新中:

“如果您没有受到此问题的严重影响,我们建议您等待包含此修复程序的下一次软件更新。”

50568 次浏览

我已经向 Oracle 提交了一份错误报告,请参阅 Bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

他们把优先级标记为低,这让我觉得他们没有完全理解问题的严重性,也就是说 FTP 在 Java/Windows 上被破坏了。我忘了在错误报告中明确说明这一点。如果其他人觉得它应该有更高的优先级,请添加到甲骨文错误报告的意见。

我刚刚注意到你也可以为这个 bug“投票”,所以如果你同意它的重要性,请给它一个投票。

这里的测试用例报告了相同的 bug: Java7 Socket Exception Bug 论坛。 这是 Java7的一个问题

关于这个问题的博客: Http://podzemski.com/2011/09/12/java-7-prevents-ftp-transfers-on-windows-when-firewall-is-on/

也许这会引起人们对这个问题的额外关注。

这个问题是由防火墙的有状态 FTP 过滤器引起的。作为一种解决方案,您可以通过使用管理员权限执行 netsh advfirewall set global StatefulFTP disable来禁用它。

这个问题可以在没有 JDK7的情况下演示,当应用程序使用 IPv6映射的 IPv4地址时,Windows 7中的防火墙会阻塞 ftp 协议。有关更多细节和变通方法,请参见 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

另一个变通方法是用以下方法启动 JVM:

-Djava.net.preferIPv4Stack=true

我们测试了 Windows 修复程序 http://support.microsoft.com/kb/2754804,并确认它确实解决了这个问题。

实际上,Windows 7上 JDK7下的 TFTP 也有同样的问题,MS 修补程序确实解决了 FTP 问题,但是仍然不适用于 TFTP。看起来 Oracle 应该向 MS 报告同样的问题,并获得另一个修复程序来解决 TFTP 问题。

我在使用 IDE Eclipse Neon、 JAVA 7和 Windows7 Professional 时遇到了同样的问题。尝试将 PDF 文件上传到 FTP 服务器。我以管理员身份在 CMD 中运行以下命令解决了这个问题:

C: \ Users \ pc01> netsh advfirewall set global StatefulFTP disable