Java 7可以在Windows Vista和7(如果启用了防火墙)上阻止FTP传输。有任何想法吗?


75

Java 7阻止Windows Vista和7上的FTP传输。

在FTP中,在传输文件之前,必须先发送PORT或PASV命令。一旦发送了其中一个命令,Windows防火墙就会关闭发送该命令的套接字。仅当防火墙处于打开状态并且不存在java.exe异常时,才会发生这种情况。我怀疑此问题与使用新的Vista IP堆栈的Java 7有关。

有谁知道如何解决或解决此问题的想法?我们正在分发Java FTP库,因此我们显然不能自己添加异常。

例外:

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日): Oracle分析了该问题,并发现这似乎是Windows防火墙和/或IPv6堆栈中的错误。他们设法通过本机C(即非Java)应用程序复制了该问题,因此有力证据表明该错误不在Java中。他们已经通知了Microsoft,所以现在就在法庭上。可以在http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696中找到更多详细信息。

跟进2(2012年7月27日): Oracle的一个联系人(非常有帮助)告诉我,该问题现在已在Microsoft上报。我们希望很快能看到一些结果。

后续行动3(2012年8月15日): 我们与Oracle的联系告诉我们,Microsoft已接受该错误,并且正在对它进行优先级排序。

后续行动4(2012年9月21日): Microsoft已生产了一个补丁程序,目前正在Oracle对其进行测试。发布日期无消息。

跟进5(2012年10月11日): 终于成功了!Microsoft已公开发布了此修补程序。他们暗示此修复程序将在将来包含在常规软件更新中:

“如果此问题没有对您造成严重的影响,我们建议您等待包含此修补程序的下一个软件更新。”


3
确实很烦人,它还会影响Ant FTP任务:java.net.SocketException:权限被拒绝:recv在org.apache.tools.ant.taskdefs.optional.net.FTP $ FTPDirectoryScanner.forceRemoteSensitivityCheck(FTP.java:695)上失败
Mostowski


Answers:



89

该问题是由防火墙的状态FTP筛选器引起的。作为解决方法,您可以通过netsh advfirewall set global StatefulFTP disable以管理员权限执行来禁用它。


2
我在这里以为我的代码有问题。愚蠢的Win7防火墙+ Java交互。+1。
aroth

确认此问题已解决Java 1.7.0_09和Windows Vista Home Premium(带有SP2)的问题。
沃伦·塞金特

为我工作,而且比MS的地狱般的修复程序
Gruber

netsh advfirewall设置全局StatefulFTP禁用对我
有用

15

我已向Oracle提交了错误报告,请参见bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

他们将优先级标记为低,这使我认为他们不太了解问题的严重性,即FTP在Java / Windows上已损坏。我忘记在错误报告中明确指出。如果其他人认为它应该具有更高的优先级,请在Oracle错误报告中添加注释。

我只是注意到您也可以对该错误进行“投票”,因此,如果您同意此错误的重要性,请对其进行投票。



15

另一个解决方法是使用以下方法启动JVM:

-Djava.net.preferIPv4Stack=true

3
我在applet中遇到了这个问题,所以我在使用:System.setProperty("java.net.preferIPv4Stack", "true");除Firefox(16.0.2)之外的所有浏览器都可以运行。
bobndrew



2

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



0

使用IDE Eclipse Neon,JAVA 7和Windows 7 Professional时遇到相同的问题。尝试将PDF文件上传到FTP服务器。我通过以管理员身份在CMD中运行以下命令来解决此问题:

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

1
Stack Overflow要求所有帖子都使用英文。我已编辑您的帖子以遵守此规则。有特定于语言的Stack Overflow社区,这些社区允许使用非英语的语言:西班牙语日语俄语葡萄牙语
FelixSFD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.