Тайм-аут FTP по NLST, когда каталог пуст
-
09-06-2019 - |
Вопрос
РЕДАКТИРОВАТЬ:Узнал, что Webmethods на самом деле использует NLST, а не LIST, если это имеет значение.
Наш бизнес использует сервер интеграции WebMethods для обработки большей части исходящих коммуникаций, а его функциональность FTP оставляет желать лучшего.У нас возникла проблема, которая может быть специфичной для WebMethods, но если кто-нибудь может указать мне, какие вещи могут вызвать это, я был бы признателен.
При опросе двух FTP-серверов наших партнеров мы подключаемся без проблем, но при выполнении NLST в пустом каталоге (без файлов и подкаталогов) время ожидания истекает.Фактическая ошибка:
com.wm.net.ftpCException:[ISC.0064.9010] java.net.SocketTimeoutException:Принять время ожидания истекло
Он выдается во время вызова службы pub.client.ftp:ls.Я без проблем вошел в систему с помощью нескольких FTP-клиентов на одних и тех же сайтах.Я использовал FTP-клиент по умолчанию в Windows, FileZilla и lftp.Все без проблем.Насколько я могу судить, сами серверы не являются одним и тем же программным обеспечением FTP-сервера.Один из них — Microsoft FTP, другой — я не уверен, но это точно не Microsoft.
Есть идеи, что может привести к тайм-ауту FTP-клиента при ожидании ответа NLST в пустом каталоге?Видимые ответы от FTP-сервера кажутся такими же, но есть ли разница в том, как NLST реагирует на пустой каталог, о котором я не знаю?
Эта проблема наблюдается на этих двух серверах.Все работает нормально в каталогах с файлами или подкаталогами внутри, но не когда они пусты.
Любые мысли и указания будут оценены по достоинству.
Спасибо!
Эрик Сиппл
Решение
Я попробовал это в WebMethods IS версии 6.5. Обновления WmPRT_6-5-1_SP1, IS_6-5_SP3.
С первого раза все сработало идеально.
Я включил отладку на FTP-сервере (ftpd по умолчанию в Debian).NLST WebMethods учитывает переданный ему параметр активный/пассивный.
В команде NLST нет ничего особенного, как и в ее правильном поведении с пустым каталогом — если LIST работает, то также должны работать RETR, STOR и NLST.Если NLST работает с непустым каталогом, он должен работать и с пустым.
Так что я предполагаю, что либо:
- В вашей версии WM есть ошибка, в моей нет
- На вашем FTP-сервере есть ошибка, а на моем нет.
- В вашей системе есть странный брандмауэр, поддерживающий протоколы, который не любит сокеты данных FTP, в которых нет данных.
Производители брандмауэров немного своенравны, когда дело касается FTP...При тестировании с другими клиентами убедитесь, что они находятся на том же компьютере, на котором работает сервер интеграции WebMethods.
Для справки: вот что должно произойти при активном NLST.
- клиент открывает прослушивающий сокет и отправляет команду PORT с подробностями этого сокета.
- клиент отправляет команду NLST
- сервер подключается к сокету прослушивания клиента (это сокет данных)
- сервер передает список через сокет данных (в данном случае нулевые байты)
- сервер закрывает сокет данных
...и в пассивном режиме
- клиент отправляет команду PASV
- сервер открывает сокет прослушивания и отвечает ответом PASV, содержащим его данные
- клиент подключается к сокету прослушивания (это сокет данных)
- клиент отправляет команду NLST
- сервер передает список через сокет данных (снова ноль байт)
- сервер закрывает сокет данных
Другие советы
Я не уверен, была ли это та же проблема, но некоторое время назад у меня были похожие симптомы при использовании другого FTP-клиента на Java (commons.net).Проблема оказалась вызвана активным/пассивным режимом соединения.К сожалению, я не могу рассказать вам больше подробностей, это все, что я помню...надеюсь, что это поможет.
Гильермо Васконселос был прав в своем ответе.Существует два режима FTP: активный и пассивный.По умолчанию FTP режим активен.Активный требует, чтобы сервер снова подключился к клиенту через какой-либо порт TCP/IP.Это не работает с брандмауэрами, потому что есть вероятность, что этот порт будет заблокирован или если вы находитесь за маршрутизатором с NAT, а не сопоставленным.
Если вместо этого вы используете пассивный режим (PASV), вы не запутаетесь.
Я собираюсь провести несколько новых тестов с пассивными настройками завтра, когда здесь будет закончено техническое обслуживание, но я не уверен, что проблема в этом.Мы можем получить список каталогов, если в этом каталоге есть файлы или подкаталоги.Это терпит неудачу только тогда, когда каталог, в котором мы используем NLST, пуст.
Будет ли разница активный/пассивный проявляться только для пустого каталога или есть другая возможность?
FTP требует, чтобы указанный порт и порт, расположенный над ним, были открыты через брандмауэр.Когда у меня возникли проблемы с тайм-аутом webMethods, это произошло потому, что в брандмауэре не был открыт обратный порт.
Говард