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

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 г.): A (очень полезный) контакт в Oracle сказал мне, что проблема теперь переросла в Microsoft. Мы надеемся вскоре увидеть некоторые результаты.

ПОСЛЕДУЮЩАЯ ДЕЯТЕЛЬНОСТЬ 3 (15 августа 2012 г.): Наш контакт в Oracle сказал нам, что Microsoft приняла ошибку и находится в процессе определения приоритетов.

ПОСЛЕДУЮЩАЯ ДЕЯТЕЛЬНОСТЬ 4 (21 сентября 2012 г.): Microsoft выпустила патч, который в настоящее время тестируется Oracle. Нет слова о дате выпуска.

ПОСЛЕДУЮЩАЯ ДЕЯТЕЛЬНОСТЬ 5 (11 октября 2012 г.): Успех наконец! Microsoft публично выпустила исправление. Они подразумевают, что исправление будет включено в общее обновление программного обеспечения в будущем:

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

Другим обходным путем является запуск JVM с помощью

-Djava.net.preferIPv4Stack=true

Ответ 5

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

Ответ 7

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

Ответ 9

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

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