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 ответов:
мы протестировали исправление для 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.
Я только что заметил, что вы также можете "проголосовать" за ошибку, поэтому, пожалуйста, дайте ему голос, если вы согласны, что это важно.
эта проблема может быть продемонстрирована без 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