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.