Java 7 запобігає передачі FTP у Windows Vista та 7, якщо брандмауер увімкнено. Будь-які ідеї?


75

Java 7 запобігає передачі FTP на Windows Vista та 7.

У FTP перед передачею файлу необхідно надіслати PORT або команду PASV. Як тільки одна з команд надіслана, брандмауер Windows закриває сокет, який її надіслав. Це трапляється, лише якщо брандмауер увімкнено, а виняток для java.exe відсутній. Я підозрюю, що ця проблема пов’язана з Java 7 із використанням нового IP-стеку Vista.

Хтось має ідеї, як вирішити цю проблему чи обійти її? Ми поширюємо бібліотеку 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 (14 листопада 2011 р.): Oracle проаналізував проблему та виявив, що це, здається, помилка у брандмауері Windows та / або стеку IPv6. Їм вдалося відтворити проблему з власною програмою C (тобто не Java), тому це є вагомим доказом того, що помилка не в Java. Вони повідомили Microsoft, тож м'яч зараз на їхньому полі. Детальніше можна знайти на веб-сайті http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

ПІДПРИЄМСТВА 2 (27 липня 2012 р.): (Дуже корисний) контакт з Oracle повідомив мені, що ця проблема наразі розгорнута в Microsoft. Ми сподіваємось побачити якісь результати найближчим часом.

ПІДПРИЄМСТВА 3 (15 серпня 2012 р.): Наш контактний особа в Oracle повідомив нам, що Microsoft прийняла помилку і в процесі розробки пріоритетів.

ПІДПРИЄМСТВА 4 (21 вересня 2012 р.): Microsoft випустила патч, який наразі тестується Oracle. Ні слова про дату випуску.

ПОСЛІДНИК 5 (11 жовтня 2012 р.): Нарешті, успіх! Microsoft публічно випустила виправлення . Вони означають, що виправлення буде включено до загального оновлення програмного забезпечення в майбутньому:

"якщо ця проблема серйозно не постраждала, рекомендуємо дочекатися наступного оновлення програмного забезпечення, яке містить це виправлення."


3
Дійсно дуже дратує, це також впливає на завдання Ant FTP: java.net.SocketException: Дозвіл відмовлено: помилка recv на org.apache.tools.ant.taskdefs.optional.net.FTP $ FTPDirectoryScanner.forceRemoteSensibilityCheck (FTP.java:695)
— Колапс Мостовського


Відповіді:


14

Ми протестували виправлення для Windows http://support.microsoft.com/kb/2754804 і підтвердили, що воно вирішило проблему.


Це вирішення також вирішує проблему для Windows Vista? Він не вказаний у передумовах.
— ThomasPeeters

Ми не тестували це на Vista
— lyaffe

89

Проблема спричинена фільтром FTP брандмауера, що містить стани. Як обхідне рішення ви можете вимкнути його, виконавши netsh advfirewall set global StatefulFTP disableз правами адміністратора.


2
І тут я думав, що з моїм кодом щось не так. Дурний брандмауер Win7 + взаємодія Java. +1.
— aroth

Переконавшись, що це вирішило проблему з Java 1.7.0_09 та Windows Vista Home Premium (з пакетом оновлень 2).
— Уоррен Серджент

працював у мене, і набагато швидше, ніж це пекельне виправлення від MS
— Грубер

netsh advfirewall set global StatefulFTP disable працював у мене :)
— Yuseferi

15

Я подав звіт про помилки в Oracle, див. Bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

Вони позначили пріоритет як низький, що змушує мене думати, що вони не зовсім розуміють масштаб проблеми, тобто FTP порушений на Java / Windows. Я забув це прямо вказати у звіті про помилку. Якщо хтось ще вважає, що це повинно мати вищий пріоритет, додайте коментар до звіту про помилки Oracle.

Я щойно помітив, що ви також можете «проголосувати» за помилку, тому, будь ласка, дайте їй право голосу, якщо ви погоджуєтесь, що вона важлива.



15

Іншим обхідним шляхом є запуск JVM з:

-Djava.net.preferIPv4Stack=true

3
У мене була ця проблема в аплеті, тому я використовую: System.setProperty("java.net.preferIPv4Stack", "true");Тоді працює кожен браузер, крім Firefox (16.0.2).
— bobndrew

5

Цю проблему можна продемонструвати без використання JDK7, оскільки брандмауер у Windows 7 блокує протокол ftp, коли програма використовує IPv6-зіставлені адреси IPv4. Детальніше та обхідні шляхи див. На веб-сторінці http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696 .


2

Блог про проблему тут: http://podzemski.com/2011/09/12/java-7-prevents-ftp-transfers-on-windows-when-firewall-is-on/

Можливо, це спричинить деяке додаткове усвідомлення проблеми.


Дякую. До речі, це впливає і на активні передачі (тобто команду PORT).
— HansA

Дякую за увагу, HansA, я зміню публікацію блогу.
— Томмі,

2

Насправді TFTP під JDK7 у Windows 7 також має ту ж проблему, виправлення 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
Переповнення стеку вимагає, щоб усі повідомлення були англійською мовою . Я відредагував вашу публікацію, щоб відповідати цьому правилу. Існують певні спільноти переповнення стеків, які дозволяють не англійську мову: іспанську , японську , російську , португальську .
— FelixSFD
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.