Назад | Перейти на главную страницу

Команда FTP ls - возвращает пустой файл

Я пытаюсь получить список файлов с удаленного FTP-сервера с помощью команды ls. Если просто выполнить команду ls в командной строке, она выводит список файлов. При добавлении имени файла к команде возвращается пустой файл.

Мой код отлично работает на нескольких других ftp-серверах (вероятно, с другой конфигурацией сервера). Не уверен, что происходит не так.

ftp> Packet tracing On .
ftp> trace on
Connected to ************.
OPEN ************
220 ************ FTP server ready.
User (*****************): 
331 Password required for ********.
230 User ********* logged in.  Access restrictions apply.
ftp> CD incoming
250 CWD command successful.
ftp> Local directory now C:\csrkb\etl\files\incoming\TASK0460\txt\FTP_OBJ_LIST.
ftp> LCD C:\csrkb\etl\files\incoming\TASK0460\txt\FTP_OBJ_LIST
ftp> ls - FTP_OBJECT_LIST.TXT
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.
ftp> BYE
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 12603 bytes in 2 transfers.
221-Thank you for using the FTP service on ftp-out.
221 Goodbye.

Команды ls и dir в ftp предназначены для использования удаленного каталога в качестве первого параметра, а не имени файла - это может работать или не работать, в зависимости от ftp-сервера. Синтаксис:

ls [remote-dir] [local-file]
  • Если параметры не переданы, отображается текущий каталог.
  • Если передан один параметр, предполагается, что это каталог, и он указан
  • Если передается 2-й параметр, это локальный файл, и выходные данные отправляются в него.
  • Если второй параметр опущен или является дефисом, то вывод отправляется на терминал.

Наличие дефиса сразу после части "ls" с последующим чем-то еще не является допустимой командой, так что кто знает, что она будет делать. As указывает имя файла в качестве первого параметра. Это должно быть только имя удаленного каталога.

Почему вы используете тире после ls? Удаленный сервер возвращает пустой список. Я бы поискал в журналах FTP-сервера. Сделайте также сетевой захват с помощью Wireshark. Если у вас есть брандмауэр L7, вы должны сделать захват на сервере и сравнить два захвата.