python编写ftp客户端_用Python写FTP客户端程序
0 前言:
ftp客户端相信大家都用过,那么我们为什么还要用Python写ftp客户端呢?
我想有两个原因:
一是写出更好的ftp客户端应用程序,方便大家使用;
二是定制一些特殊服务,例如每天定时下载/上传某文件;
我还没能力也没时间写出ftp客户端应用程序,前期先分析一下python写ftp客户端的核心部分,即实现上传和下载的关键部分。
首先看一下ftp服务器/客户端架构:
1 FTP服务器/客户端
ftp架构
上图展示了ftp的工作流程:
1.客户端连接远程主机上的FTP 服务器。
2.客户端输入用户名和密码(或“anonymous”和电子邮件地址)。
3.客户端进行各种文件传输和信息查询操作。
4.客户端从远程FTP 服务器退出,结束传输。
下面是一段Python伪代码。from ftplib import FTP
f = FTP('some.ftp.server')
f.login('anonymous', 'your@email.address')
:
f. quit()
当然,这只是一般情况下的流程。有时,由于网络两边计算机的崩溃或网络的问题,会导致整个传输在完成之前就中断。
如果客户端超过15 分钟(900 秒)还没有响应,FTP 连接就会超时并中断。
在底层,FTP 只使用TCP,而不使用UDP。
另外,可以将FTP 看作客户端/服务器编程中的特殊情况。因为这里的客户端和服务器都使用两个套接字来通信:
一个是控制和命令端口(21 号端口),另一个是数据端口(有时是20 号端口),如上图 所示。
FTP 有两种模式:主动和被动。只有在主动模式下服务器才使用数据端口。
在服务器把20 号端口设置为数据端口后,它“主动”连接客户端的数据端口。而在被动模式下,服务器只是告诉客户端随机的数据端口号,客户端必须主动建立数据连接。
2 客户端FTP 程序示例#!/usr/bin/env python# coding=utf-8import ftplib
import os
import socket
import pdb
HOST = 'ftp.debian.org'DIRN = 'debian/tools'FILE = 'loadlin.exe'def main(): try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror) as e: print 'ERROR: cannot reach "%s"' % HOST return
print '*** Connected to host "%s"' % HOST try:
f.login()
except ftplib.error_perm: print 'ERROR: cannot login anonymously'
f.quit() return
print '*** Logged in as "anonymous"'
try:
f.cwd(DIRN)
except ftplib.error_perm: print 'ERROR: cannot CD to "%s"' % DIRN
f.quit() return
print '*** changed to "%s" folder' % DIRN try:
f.retrbinary('RETR %s' % FILE,
open(FILE,'wb').write)
except ftplib.error_perm: print 'ERROR: cannot read file "%s"' % FILE
os.unlink(FILE) else: print '*** Download "%s" to CWD' %FILE
f.quit()if __name__ == '__main__':
main()
运行结果:
ftp客户端运行结果:可以看出loadlin.exe文件被更新了。
3 疑问
上面编写的客户端代码对ftp.debian.org站点可以正常连接,为什么有的ftp服务器明明可以ping通却无法连接?
ping ftp.python.org
然而,却无法连接到服务器:
无法连接ftp.python.org
请高人指点!!谢谢!!
作者:rebirth_2017
链接:https://www.jianshu.com/p/bb8207a1ff75
python编写ftp客户端_用Python写FTP客户端程序相关推荐
- python编写脚本方法_【Python】教你一步步编写banner获取脚本
Hello 各位小伙伴们大家好,周末过的愉快吗? 刚好最近学习了使用python编写banner获取脚本,今天就跟大家一起一步一步再学习一遍吧. Part.1 说明篇 什么是banner? banne ...
- 哪些软件是python编写出来的_用Python编程需要什么软件?
用Python编程需要什么软件?Python编程是一门适合新手入门的编程语言,现在有不少程序员业余时间学习Python编程语言,学习Python找到好工具会大大提高学习的效率.好用的Python编程软 ...
- python编写木马攻击_用Python写一个自动木马程序
电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...
- 用python编写学生管理系统_用python写一个简单的学生管理系统
要求如下:1.一个循环2中输入内容的能力.显示函数添加新名片显示所有查询的名片3退出系统.让用户输入所需的操作,如输入1,2,3,04.新列表提示用户输入名称和输入电子邮件提示成功添加新名片.5.显示 ...
- 用python编写函数回归分析_用python编写函数的logistic回归系数
下面是逻辑回归的代码.在from sklearn.linear_model import LogisticRegression from sklearn.model_selection import ...
- python编写测试系统_纯 python 编写的一套 dubbo 测试平台
因组织要求,需要一个Dubbo接口的测试工具,经多方研究,遂决定要写一个不需要编写任何代码,直接在页面上填写数据就能直接运行Dubbo接口的测试工具,类似于Postman编写http接口一样简单. 整 ...
- python编写脚本方法_使用Python编写提取日志中的中文的脚本的方法
由于工作需要在一大堆日志里面提取相应的一些固定字符,如果单纯靠手工取提取,数据量大,劳心劳力,于是自然而然想到了用Python做一个对应的提取工具,代替手工提取的繁杂,涉及中文字符,正则表达式不好匹配 ...
- python编写登录接口_使用python编写一个登录接口
需求: 编写登录接口 输入用户名密码 认证成功后 显示欢迎信息 输入三次后锁定 用户信息文件 黑名单的文件 黑名单里检查,不让登录 用户名密码判定 流程图: 代码:#!/usr/bin/env pyt ...
- python编写视频播放器_基于Python编写的语音播放软件
单位经常使用广播进行临时事项的通知 ( 将文字转换为语音然后通过功放广 播 ) ,但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定--经常 出现莫名其妙的故障,容易给工作带来被动.学 ...
- python编写ai电话_用Python编写一个国际象棋AI程序
最近我用Python做了一个国际象棋程序并把代码发布在Github上了.这个代码不到1000行,大概20%用来实现AI.在这篇文章中我会介绍这个AI如何工作,每一个部分做什么,它为什么能那样工作起来. ...
最新文章
- 【冷门实用小工具】JAVA和C#轻量级的UML图绘制工具NClass,UML类图编辑器免安装版【亲测有效】
- 中职 学生学php学什么区别,职业高中和中专的区别是什么?哪个学历高
- 32读取ltc的温度值_Arduino基础入门篇29—模拟温度传感器LM35
- python简单代码加法-Python tkinter实现简单加法计算器代码实例
- HDU3662(求三维凸包表面的多边形个数,表面三角形个数,体积,表面积,凸包重心,凸包中点到面的距离)
- javascript 面向对象编程小记
- php7.2 event扩展php_sockets_le_socket错误解决
- win11WiFi无法连接网络怎么办 Windows11WiFi无法连接网络的解决方法
- 笔试c语言实现栈,栈的实现与操作(C语言实现)
- js读取剪切板html,JS获取剪贴板的内容
- 朗强:HDMI分配延长器的作用
- Ubuntu文件系统损坏修复
- WFQ/CBWFQ/LLQ介绍
- 笔记本上怎么怎么暂停cmd打印窗口
- 如何对下拉菜单进行截图
- ubuntu设置文件夹共享
- matlab 棋盘格畸变矫正
- 时间频度和时间复杂度
- 密码正确登入不了网络计算机,电脑突然断网,然后重启输入密码就登陆不了电脑为什么?老是显示当前电脑时间与网络时间不一致...
- idea操作redis
热门文章
- 没有add framework support选项_什么?小型机房没有“线”也能很好的管理机房?
- Cpp / 通用引用、引用折叠与完美转发问题
- C/Cpp / STL / 各个实现版本的说明
- Arduino--DHT11温湿度传感器
- Rtx userlist.php,【图片】【C语言】【控制台】提取腾讯通用户信息(id,用户名,手机)【erbi_lucifer吧】_百度贴吧...
- mysql window怎么安装补丁_window下mysql安装步骤
- 如何读群晖硬盘_更新教程:群晖下直接挂载WINDOWS的NTFS格式硬盘,试验通过......
- 为什么python打包的应用那么大_浅谈python3打包与拆包在函数的应用详解
- ALVのイベントを取得する方法
- [源码和文档分享]基于C++实现的运动会统分系统