Я пытаюсь получить список файлов с удаленного 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]
Наличие дефиса сразу после части "ls" с последующим чем-то еще не является допустимой командой, так что кто знает, что она будет делать. As указывает имя файла в качестве первого параметра. Это должно быть только имя удаленного каталога.
Почему вы используете тире после ls? Удаленный сервер возвращает пустой список. Я бы поискал в журналах FTP-сервера. Сделайте также сетевой захват с помощью Wireshark. Если у вас есть брандмауэр L7, вы должны сделать захват на сервере и сравнить два захвата.