Java 7 предотвращает передачу FTP в Windows Vista и 7, если включен брандмауэр. Есть идеи?


Java 7 предотвращает передачу FTP на Windows Vista и 7.

в FTP перед передачей файла должен быть отправлен порт или команда PASV. Как только одна из команд отправляется Брандмауэр Windows закрывает сокет, который его отправил. Это происходит только в том случае, если брандмауэр включен и исключение для java.ехе отсутствует. Я подозреваю, что эта проблема связана с 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 публично выпустила исправления. Они подразумевают, что исправление будет включено в общее обновление программного обеспечения в будущем:

"Если вы не не подвержены серьезно эту проблему, рекомендуется дождаться следующего обновления программного обеспечения, содержащего это исправление."

9 76

9 ответов:

мы протестировали исправление для Windowshttp://support.microsoft.com/kb/2754804 и подтвердил, что это действительно решило проблему.

проблема вызвана фильтром FTP с отслеживанием состояния брандмауэра. В качестве обходного пути вы можете отключить его, выполнив netsh advfirewall set global StatefulFTP disable с правами администратора.

Я отправил отчет об ошибке в Oracle, см. bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

Они отметили приоритет как низкий, что заставляет меня думать, что они не совсем понимают масштаб проблемы, т. е. что FTP сломан на Java/Windows. Я забыл указать это явно в отчете об ошибке. Если кто-то еще считает, что он должен иметь более высокий приоритет, добавьте комментарий к отчету об ошибке Oracle.

Я только что заметил, что вы также можете "проголосовать" за ошибку, поэтому, пожалуйста, дайте ему голос, если вы согласны, что это важно.

еще один обходной путь-запустить JVM с помощью:

-Djava.net.preferIPv4Stack=true

эта проблема может быть продемонстрирована без JDK7, это брандмауэр в Windows 7, блокирующий протокол ftp, когда приложение использует IPv6-сопоставленные адреса IPv4. См.http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696 для получения более подробной информации и обходных путей.

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

может быть, это вызовет некоторую дополнительную осведомленность о проблеме.

на самом деле TFTP под JDK7 на windows 7 также имеют ту же проблему, исправление MS решает проблему FTP, но все еще не работает для TFTP. Кажется, Oracle должен сообщить о той же проблеме MS и получить другое исправление для решения проблемы TFTP.

та же ошибка была сообщена здесь с тестовым случаем: Ошибка Исключения Сокета Java 7 форум. Его проблема с Java 7

У меня была такая же проблема с использованием IDE Eclipse Neon, JAVA 7 и Windows 7 Professional. Попытка загрузить PDF-файл на FTP-сервер. Я решил это, выполнив следующую команду в CMD от имени администратора:

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