FTP ls 命令 - 返回空文件

FTP ls 命令 - 返回空文件

我正在尝试使用 ls 命令从远程 FTP 服务器检索文件列表。当在命令行中单独执行 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.

答案1

为什么在 ls 后面使用破折号?远程服务器返回一个空列表。我会在 FTP 服务器日志中搜索。还可以使用 Wireshark 进行网络捕获。如果您有 L7 防火墙,则应该在服务器上进行捕获并比较两次捕获。

答案2

ftp 中的 ls 和 dir 命令旨在将远程目录作为第一个参数,而不是文件名 - 使用文件名执行此操作可能有效,也可能无效,具体取决于 ftp 服务器。语法为:

ls [远程目录] [本地文件]
  • 如果没有传递参数,则列出当前目录。
  • 如果传递了一个参数,则假定它是一个目录并列出
  • 如果传递了第二个参数,则它是一个本地文件,并且输出将发送到此文件。
  • 如果第二个参数被省略或为连字符,则输出将发送到终端

在 'ls' 部分后面立即使用连字符,后面跟着其他内容,这不是一个有效的命令,所以谁知道它会做什么。就像指定文件名作为第一个参数一样。它应该只是一个远程目录名称。

相关内容