Я вижу, что некоторые FTP-клиенты не могут завершить работу при передаче тысяч файлов на FTP-сервер. Команда mput *
выполняется в течение нескольких часов, а затем зависает
150 Opening BINARY mode data connection.
У меня нет простого способа связаться с администраторами FTP-сервера (все, что у меня есть, это IP-адрес в блоке, управляемом WeHostWebSites.Com
и я знаю, что этот IP-адрес разделяется дюжиной доменных имен).
FTP-сервер представляет себя как
220 Microsoft FTP Service
Поэтому я предполагаю, что это IIS.
Я запускаю mput *
в каталоге, который содержит тысячи файлов. До тех пор, пока передача не зависнет на некоторое время, пока контрольное соединение не закроется из-за неактивности.
Изучив логи, я вижу следующую картину. Первоначально файлы передаются в пассивном режиме.
229 Entering Extended Passive Mode (|||53567|)
150 Opening BINARY mode data connection.
Затем номера портов увеличиваются, пока не достигнут 65200. В этот момент сервер возвращает 501
.
229 Entering Extended Passive Mode (|||65201|)
501 Server cannot accept argument.
Который запускает клиентов, таких как lukemftp
(который поставляется по умолчанию с установками OpenSUSE 11) или плагин FTP-менеджера FAR (который популярен среди пользователей Windows), чтобы переключиться на активный, поэтому следующие передачи начинаются с команды PORT
.
200 PORT command successful.
150 Opening BINARY mode data connection.
netstat -t
также показывает, что новые соединения идут на порт 20/tcp сервера. После передачи еще 3000+ файлов команда зависает. В этот момент выходные данные netstat -t
показывают, как теряются соединения TIME_WAIT
а затем управляющее соединение закрывается из-за неактивности.
Обходной путь : часто предлагается использовать lftp
для больших передач FTP, и это оказалось решением проблемы. Наблюдая, как lftp
выполняет команду mirror -R
для каталога с более чем 100000 файлами, я вижу, как номера динамических портов достигают 65200, а затем продолжают с 49152, сохраняя все передачи пассивными. Так что эта команда успешно завершена.
Есть ли способ обойти эту проблему без использования lftp
(В частности, что можно сделать на чисто Windows-клиенте, у которого нет lftp
?
Примечание. Этот вопрос был опубликован несколько месяцев назад на сайте http://serverfault.com, но не получил никаких ответов и недавнего закрытого голосования. Я решил удалить его из ServerFault и вместо этого поместить его в SuperUser.