【发布时间】:2018-10-11 13:16:10
【问题描述】:
我正在尝试创建一个简单的 FTP 客户端,但无法建立 FTP 连接。
我使用了以下代码:
import socket
sock = socket.socket()
sock.connect(('localhost', 21))
data = 'USER adm\r\n'.encode()
sock.send(data)
print('Close')
sock.close()
我尝试连接的 FTP 服务器的日志如下所示:
(048507)01.05.2018 06:00:03 - (未登录) (127.0.0.1)> 已连接到端口 21,正在发送欢迎消息...
(048507)01.05.2018 06:00:03 - (未登录) (127.0.0.1)> 220-FileZilla Server 0.9.60 beta
(048507)01.05.2018 06:00:03 - (未登录) (127.0.0.1)> 220-由 Tim Kosse (tim.kosse@filezilla-project.org)
编写 (048507)01.05.2018 06:00:03 - (未登录) (127.0.0.1)> 220 请访问https://filezilla-project.org/
(048507)01.05.2018 06:00:03 - (未登录) (127.0.0.1)> 已断开连接。
我尝试发送USER adm 命令,但在日志中找不到它。如何使用套接字建立与 FTP 服务器的成功连接?
【问题讨论】:
-
欢迎来到 SO!我编辑了标题结尾的问题文本,以使其对其他人更具可读性和可理解性。有关格式化的更多信息,请参阅editing help。
-
至少你需要用
\r\n终止命令 -
已添加\r\n,但问题未解决。
-
到目前为止,您所做的只是发送用户名并关闭连接。假设该部分已正确完成。你认为下一步应该是什么? (或者,如果你看到一些证据表明它没有正确完成,请解释原因。)
-
下一步是发送“PASS”和密码。但是我不能使用这个脚本发送“USER”。我认为 - 脚本发送数据,但它是编码的,并且 ftp 服务器不“理解”编码数据。但是 send() 仅适用于编码数据。当我使用 perl 脚本时, send() 发送字符串 - ftp 服务器获取此数据并将其显示在日志中。当我使用 python 脚本时,send() 需要编码数据 - ftp 服务器没有获取此数据(不在日志中显示)。
标签: python-3.x sockets ftp