У меня есть FTP-сервер, который поддерживает режим пассивного сервера (с помощью команды PASV). Это прекрасно работает с Windows XP. Когда я хочу получить доступ к этому серверу из Windows Vista или Windows 7 с включенным брандмауэром, у меня возникает немедленное отключение соединения. Пакет сброса отправляется на сервер, и сокету сообщается, что сервер сбросил соединение (что не соответствует действительности).

Проблема исчезает, когда брандмауэр отключен.

Соединения с другими FTP-серверами работают правильно. Разница в том, что ответ сервера на PASV не заключает в себя поле адреса с круглыми скобками. Это законно, как описано в RFC-959 и RFC-1132.

Как я могу настроить брандмауэр, чтобы остановить это плохое поведение?

3 ответа3

1

Я не думаю, что в этом виноваты круглые скобки.
Я бы скорее подумал, что динамический диапазон портов, выделенный этим сервером, не соответствует Vista/7.

Для обсуждения предмета, см. Эту статью:
Динамический диапазон портов по умолчанию для TCP/IP изменился в Windows Vista и Windows Server 2008

Чтобы просмотреть динамический диапазон портов на вашем компьютере для ipv4, используйте следующую команду:

netsh int ipv4 show dynamicport tcp 

Чтобы установить динамический диапазон портов для TCP, используйте, например:

netsh int ipv4 set dynamicport tcp start=1024 num=30000

Другие команды описаны в статье выше.

РЕДАКТИРОВАТЬ: Обратите внимание, что брандмауэр Windows может быть достаточно интеллектуальным, чтобы открыть динамический порт, указанный в ответе PASV, даже если этот порт не попадает в диапазон по умолчанию для динамических портов. Но может случиться так, что он все еще не достаточно умен, чтобы понять ответ без скобок. Возможно, стоит взглянуть на возможность расширения диапазона по умолчанию для динамических портов.

0

Это напоминает мне о проблеме с Java и FTP, работающей под Windows 7.

https://stackoverflow.com/questions/6990663/java-7-prevents-ftp-transfers-on-windows-vista-and-7-if-firewall-is-on-any-idea

В конечном итоге это была ошибка брандмауэра Microsoft с FTP, пассивным режимом и IPv6-соединениями (адрес не обязательно должен был быть IPv6, только программное обеспечение, которое установило соединение, делает это с использованием стека IPv6).

Симптом, описанный в вашем вопросе, звучит очень похоже на эту проблему, поэтому я приведу здесь ссылку и подведу итог (хотя этот вопрос не имеет ничего общего с Java, исправление может быть таким же)

Краткое описание нескольких решений, упомянутых там:

  • Исправление Microsoft: http://support.microsoft.com/kb/2754804
  • Попытайтесь заставить ваш FTP-клиент работать под управлением Vista/7 со стеком IPv4 (возможно, возможно, нет)
  • Отключите FTP с состоянием брандмауэра Windows с помощью netsh advfirewall set global StatefulFTP disable (однако это приведет к отключению подключений FTP в пассивном режиме, пробивающих ваш брандмауэр)
0

Вы не можете настроить брандмауэр, потому что он просто глючит.

Если вы не можете изменить FTP-сервер для отправки информации о порте в скобках, поскольку он встроен в старые устройства в полевых условиях, вам потребуется специальный клиент со следующим поведением.

Этот клиент должен отправлять команду TYPE I непосредственно перед каждой командой PASV чтобы поддерживать брандмауэр в нормальном состоянии. Если вам нужна недвоичная передача, вы можете изменить параметр команды TYPE.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .