基于Socket编程实现FTP客户端

本文介绍了如何使用Python的Socket编程实现FTP客户端,详细讲解了连接服务器、登录、PASV模式、LIST命令、文件下载及断点续传的过程。实验环境包括Cygwin、Python 2.7和FileZilla Server,文章还提到了FTP协议的主动和被动模式,以及数据端口的使用。
摘要由CSDN通过智能技术生成

实验环境

  1. Cygwin
  2. Python 2.7
  3. FileZella Server

原理

利用ftp协议进行文件传输时,主要利用两个端口:命令端口(也叫作控制端口)和数据端口。控制端口主要用来传输命令,数据端口主要用于传输数据。
这两个端口一般是20/21,其中20代表主动模式下的数据端口,21代表控制端口。而被动模式下,我们将使用x/21。其中x代表我们被动模式下的数据端口,而21仍然为控制端口(x的获取我们将在后文说明)。
更详细的原理参见一篇讲得很好的博文

实验过程

连接server

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(url, 21)

其中url为我们要连接的服务器的IP地址,这里是localhost
如果连接成功,我们将收到从服务器返回的响应码220,返回具体信息如下:

220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/

登录

当我们成功连接server后,需要做的事情就是以用户的身份登录进我们的FTP服务器。
在我的FileZella Server上预设了一个用户,用户名为lz,密码为123456。接下来我们将以该身份登录进去。
首先,向服务器发送用户名

sock.sendall('USER lz\r\n')
cmd = self.sock_.recv(1024)
print cmd

cmd是从服务器返回的状态信息,服务器将返回331告诉我们需要输入密码

331 Password required for lz

接下来向服务器发送密码

sock.sendall('PASS 123456\r\n')
cmd = sock.recv(1024)
print cmd

如果成功服务器将以230响应,并且返回信息

230 Logged on
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值