Java 7 verhindert FTP-Übertragungen unter Windows Vista und 7, wenn die Firewall aktiviert ist. Irgendwelche Ideen?

75

Java 7 verhindert FTP-Übertragungen unter Windows Vista und 7.

In FTP muss vor der Übertragung einer Datei ein PORT- oder ein PASV-Befehl gesendet werden. Sobald einer der Befehle gesendet wird, schließt die Windows-Firewall den Socket, der ihn gesendet hat. Dies geschieht nur, wenn die Firewall aktiviert ist und eine Ausnahme für java.exe fehlt. Ich vermute, dass dieses Problem mit Java 7 zusammenhängt, das den neuen Vista IP-Stack verwendet.

Hat jemand Ideen, wie man dieses Problem beheben oder umgehen kann? Wir verteilen eine Java-FTP-Bibliothek, sodass wir offensichtlich keine Ausnahmen selbst hinzufügen können.

Ausnahme:

java.net.SocketException: Permission denied: recv failed

JRE-Versionsinfo:

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)

FOLLOW-UP 1 (14. November 2011): Oracle hat das Problem analysiert und festgestellt, dass es sich anscheinend um einen Fehler in der Windows-Firewall und / oder im IPv6-Stack handelt. Sie haben es geschafft, das Problem mit einer nativen C-App (dh einer Nicht-Java-App) zu replizieren. Dies ist ein starker Beweis dafür, dass der Fehler nicht in Java vorliegt. Sie haben Microsoft informiert, so dass der Ball jetzt in ihrem Spielfeld ist. Weitere Informationen finden Sie unter http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

FOLLOW-UP 2 (27. Juli 2012): Ein (sehr hilfreicher) Kontakt bei Oracle hat mir mitgeteilt, dass das Problem jetzt bei Microsoft eskaliert ist. Wir hoffen, bald einige Ergebnisse zu sehen.

FOLLOW-UP 3 (15. August 2012): Unser Kontakt bei Oracle hat uns mitgeteilt, dass Microsoft den Fehler akzeptiert hat und derzeit Prioritäten setzt.

FOLLOW-UP 4 (21. September 2012): Microsoft hat einen Patch erstellt, der derzeit von Oracle getestet wird. Kein Wort zu einem Veröffentlichungsdatum.

FOLLOW-UP 5 (11. Oktober 2012): Endlich Erfolg! Microsoft hat öffentlich einen Hotfix veröffentlicht . Sie implizieren, dass das Update in Zukunft in einem allgemeinen Software-Update enthalten sein wird:

"Wenn Sie von diesem Problem nicht ernsthaft betroffen sind, empfehlen wir Ihnen, auf das nächste Software-Update zu warten, das diesen Hotfix enthält."

HansA
quelle
3
Sehr ärgerlich, es wirkt sich auch auf die Ant-FTP-Aufgabe aus: java.net.SocketException: Berechtigung verweigert: recv fehlgeschlagen bei org.apache.tools.ant.taskdefs.optional.net.FTP $ FTPDirectoryScanner.forceRemoteSensitivityCheck (FTP.java:695)
Mostowski Zusammenbruch
Problemumgehung
MacGyver

Antworten:

14

Wir haben den Windows-Hotfix http://support.microsoft.com/kb/2754804 getestet und bestätigt, dass das Problem dadurch behoben wurde.

Lyaffe
quelle
Behebt dieser Hotfix auch das Problem für Windows Vista? Es ist nicht in den Voraussetzungen aufgeführt.
ThomasPeeters
Wir haben dies nicht auf Vista
Lyaffe
89

Das Problem wird durch den statusbehafteten FTP-Filter der Firewall verursacht. Um dieses Problem netsh advfirewall set global StatefulFTP disablezu umgehen, können Sie es deaktivieren, indem Sie es mit Administratorrechten ausführen .

Chris
quelle
2
Und hier dachte ich, dass etwas mit meinem Code nicht stimmt. Dumme Win7 Firewall + Java Interaktionen. +1.
aroth
Bestätigt, dass dies das Problem mit Java 1.7.0_09 und Windows Vista Home Premium (mit SP2) behoben hat.
Warren Sergent
arbeitete für mich und viel schneller als dieser verdammt
Gruber
Netsh Advfirewall Set Global StatefulFTP Deaktivierung hat bei mir funktioniert :)
Yuseferi
15

Ich habe einen Fehlerbericht an Oracle gesendet , siehe bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

Sie haben die Priorität als niedrig markiert, was mich glauben lässt, dass sie das Ausmaß des Problems nicht ganz verstehen, dh dass FTP unter Java / Windows fehlerhaft ist. Ich habe vergessen, dies explizit im Fehlerbericht anzugeben. Wenn jemand anderes der Meinung ist, dass es eine höhere Priorität haben sollte, fügen Sie dem Oracle-Fehlerbericht einen Kommentar hinzu.

Mir ist gerade aufgefallen, dass Sie auch für den Fehler "stimmen" können. Geben Sie ihm also bitte eine Stimme, wenn Sie damit einverstanden sind, dass er von Bedeutung ist.

HansA
quelle
Problemumgehung
MacGyver
15

Eine weitere Problemumgehung besteht darin, die JVM zu starten mit:

-Djava.net.preferIPv4Stack=true
prunge
quelle
3
Ich hatte dieses Problem in einem Applet, also benutze ich: System.setProperty("java.net.preferIPv4Stack", "true");Jeder Browser außer Firefox (16.0.2) funktioniert dann.
Bobndrew
2

Tatsächlich hat TFTP unter JDK7 unter Windows 7 auch das gleiche Problem. Der MS-Hotfix behebt zwar das FTP-Problem, funktioniert jedoch immer noch nicht für TFTP. Anscheinend sollte Oracle das gleiche Problem an MS melden und einen weiteren Hotfix erhalten, um auch das TFTP-Problem zu beheben.

Y. Huang
quelle
1

Der gleiche Fehler wurde hier mit einem Testfall gemeldet: Java 7 Socket Exception Bug Forum. Es ist ein Problem mit Java 7

Dave
quelle
0

Ich hatte das gleiche Problem mit IDE Eclipse Neon, JAVA 7 und Windows 7 Professional. Versuch, eine PDF-Datei auf einen FTP-Server hochzuladen. Ich habe es gelöst, indem ich den folgenden Befehl in CMD als Administrator ausgeführt habe:

C: \ Users \ pc01> netsh advfirewall set global StatefulFTP disable
Davis Gereda Hernandez
quelle
1
Für den Stapelüberlauf müssen alle Beiträge in englischer Sprache verfasst sein . Ich habe Ihren Beitrag bearbeitet, um dieser Regel zu entsprechen. Es gibt sprachspezifische Stack Overflow-Communitys, die Nicht-Englisch zulassen: Spanisch , Japanisch , Russisch , Portugiesisch .
FelixSFD