Java 7 forhindrer FTP overførsler på Windows Vista og 7, hvis firewall er tændt. Nogle ideer?

Indlæg af Hanne Mølgaard Plasc

Problem



Java 7 forhindrer FTP overførsler på Windows Vista og 7.


I FTP, før en fil overføres, skal en PORT- eller PASV-kommando sendes. Så snart en af ​​kommandoerne er sendt, lukker Windows Firewall stikket, der sendte det. Dette sker kun, hvis firewall er tændt, og en undtagelse for java.exe er fraværende. Jeg formoder, at dette problem er relateret til Java 7 ved hjælp af den nye Vista IP stack.


Har nogen nogen ideer, hvordan man løser eller løser problemet? Vi distribuerer et Java FTP-bibliotek, så vi selvfølgelig ikke kan tilføje undtagelser selv.


Undtagelse:


java.net.SocketException: Permission denied: recv failed


JRE version info:


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)





OPFØLGNING 1 (14. november 2011):
Oracle har analyseret problemet og har konstateret, at det ser ud til at være en fejl i Windows Firewall og/eller IPv6-stakken. De formåede at replikere problemet med en native C (dvs. ikke-Java) app, så dette er stærkt bevis for, at fejlen ikke er i Java. De har informeret Microsoft, så bolden er i deres ret nu. Flere detaljer kan findes på http://bugs.sun.com/bugdatabase/view\_bug.do?bug\_id=7077696[6]


FOLLOW UP 2 (27. juli 2012):
En (meget hjælpsom) kontakt hos Oracle har fortalt mig, at problemet nu er blevet eskaleret hos Microsoft. Vi håber at se nogle resultater snart.


OPFØLGNING 3 (15. august 2012):
Vores kontakt hos Oracle har fortalt os, at Microsoft har accepteret fejlen og er ved at prioritere den.


OPFØLGNING 4 (21. september 2012):
Microsoft har produceret en patch, der for øjeblikket bliver testet af Oracle. Intet ord på en udgivelsesdato.


OPFØLGNING 5 (11. oktober 2012):
Succes endelig! Microsoft har offentligt udgivet et hotfix. De indebærer, at løsningen vil blive inkluderet i en generel softwareopdatering i fremtiden: [7]



  'Hvis du ikke er hårdt ramt af dette problem, anbefaler vi, at du venter på den næste softwareopdatering, der indeholder dette hotfix.'


Bedste reference


Vi har testet Windows-hotfixet http://support.microsoft.com/kb/2754804 og bekræftet, at det løste problemet. [8]

Andre referencer 1


Problemet skyldes firewallets stateful FTP-filter. Som en løsning kan du deaktivere den ved at udføre netsh advfirewall set global StatefulFTP disable med administratorrettigheder.

Andre referencer 2


Jeg har sendt en fejlrapport til Oracle, se bugs.sun.com/bugdatabase/view\_bug.do?bug\_id=7077696 [9]


De har markeret prioriteten så lavt, hvilket får mig til at tro, at de ikke forstår størrelsen af ​​problemet, dvs. at FTP er brudt på Java/Windows. Jeg har glemt at angive det udtrykkeligt i fejlrapporten. Hvis en anden føler at den burde have en højere prioritet, skal du tilføje en kommentar til Oracle fejlrapporten.


Jeg har lige bemærket, at du også kan 'stemme' for fejlen, så vær venlig at give det en stemme, hvis du er enig i det er vigtigt.

Andre referencer 3


En anden løsning er at starte JVM med:


-Djava.net.preferIPv4Stack=true

Andre referencer 4


Dette problem kan påvises uden JDK7, det er firewallen i Windows 7, der blokkerer ftp-protokollen, når applikationen bruger IPv6-kortlagte IPv4-adresser. Se http://bugs.sun.com/bugdatabase/view\_bug.do?bug\_id= 7077696 for flere detaljer og løsninger. [10]

Andre referencer 5


Blogged om problemet her:
http://podzemski.com/2011/09/12/java-7-prevents-ftp-transfers-on-windows-when-firewall-is-on/[11]


Måske vil det medføre yderligere bevidsthed om problemet.

Andre referencer 6


Faktisk TFTP under JDK7 på Windows 7 har også det samme problem, MS-hotfixet løser FTP-problem, men fungerer stadig ikke for TFTP. Synes Oracle skal rapportere det samme problem til MS og få et andet hotfix til at løse TFTP problem også.

Andre referencer 7


Den samme fejl blev rapporteret her med en test sag:
Java 7 Socket Exception Bug forum.
Det er et problem med Java 7 [12]

Andre referencer 8


Jeg havde det samme problem ved hjælp af IDE Eclipse Neon, JAVA 7 og Windows 7 Professional. Forsøger at uploade en PDF-fil til en FTP-server. Jeg løste det ved at køre følgende kommando i CMD som administrator:


C:  Users  pc01> netsh advfirewall set global StatefulFTP disable