我正尝试使用ls命令从远程FTP服务器检索文件列表。 当在命令行中单独执行ls时,会列出这些文件。 当向命令添加一个文件名时,它将返回一个空文件。
我的代码在其他几个ftp服务器上完美工作(可能是不同的服务器configuration)。 不知道发生了什么问题。
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之后使用破折号? 远程服务器正在返回一个空列表。 我会在FTP服务器日志中search。 使用Wireshark进行networking捕获。 如果你有一个L7防火墙,你应该在服务器上进行捕获并比较两个捕获。
ftp中的ls和dir命令是用来把远程目录作为第一个参数,而不是文件名 – 这样做对于一个文件名来说可能是行不通的,这取决于ftp服务器。 语法是:
ls [remote-dir] [local-file]
在'ls'部分之后加上连字符并不是一个有效的命令,所以谁知道它会做什么。 正如指定一个文件名作为第一个参数。 它应该只是一个远程目录名称。