文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python如何搭建FTP服务器

2023-06-15 03:08

关注

这篇文章主要介绍了python如何搭建FTP服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、了解FTP服务器

(1) 主动模式:客户端首先从任意的非特殊端口n(大于1023的端口,也是客户端的命令端口)连接FTP服务器的命令端口(默认是21),向服务器发出命令 PORT n+1,告诉服务器自己使用n+1端口作为数据端口进行数据传输,然后在n+1端口监听。服务器收到PORT n+1后向客户端返回一个“ACK”,然后服务器从它自己的数据端口(20)到 客户端先前指定的数据端口(n+1端口)的连接,最后客户端向服务器返回一个“ACK”。

python如何搭建FTP服务器

(2)被动模式:为了解决服务器发起到客户端的连接问题,开发了被动FTP,或者叫做PASV,当客户端通知服务器处于被动模式时才启用。在被动模式下,命令连接和数据连接都是有客户端发起。当开启一个FTP连接时,客户端打开两个非特权的任意端口(大于1023)。第一个端口连接服务器的21端口,但是与主动方式不同,客户端不会提交PORT命令并允许服务器来回连接数据端口,而是提交PASV命令。这样做的结果就是服务器会开启任意一个非特权端口,并且发送PORT p命令给客户端,然后客户端发起从本地端口 n+1 到 服务器端口p 的连接来传输数据

python如何搭建FTP服务器

总结:主动模式有利于对FTP服务器的管理,但是不利于对客户端的管理。因为FTP服务器企图和客户端的高位随机端口建立连接,而这个端口很有可能会被客户端的防火墙阻塞掉。被动模式相反。

二、利用python搭建FTP服务器

python搭建FTP需要利用到pyftpdlib模块

1.安装 pyftpdlib 模块

C:\Users\LTP> pip3 install pyftpdlibC:\Users\LTP> python3 -m pyftpdlib -p 21

找到pyftpdlib模块源文件所在目录

C:\Users\LTP> python3……>>> import pyftpdlib>>> pyftpdlib.__path__['/usr/local/python3/lib/python3.7/site-packages/pyftpdlib']

到 pyftpdlib目录下

发现 filesystems.py 和 handlers.py 两个文件,先执行备份

C:\Users\LTP> dir E:\PycharmProjects\untitled\project01\venv\Lib\site-packages\pyftpdlib2021/05/15  17:50    <DIR>          .2021/05/15  17:50    <DIR>          ..2017/12/30  16:44            35,246 authorizers.py2021/05/15  17:49            24,798 filesystems - 副本.py2021/05/15  17:49            24,798 filesystems.py2019/10/24  16:26           144,635 handlers - 副本.py2019/10/24  16:26           144,635 handlers.py2017/12/30  16:44            36,769 ioloop.py2019/10/24  16:26             5,823 log.py2019/10/24  16:26             3,844 prefork.py2019/10/24  16:26            21,658 servers.py2021/05/15  17:45    <DIR>          test2019/10/24  16:26               774 _compat.py2019/10/24  16:28             2,845 __init__.py2018/04/26  18:41             4,879 __main__.py2021/05/15  17:46    <DIR>          __pycache__              12 个文件        450,704 字节               4 个目录 44,605,644,800 可用字节# 备份 filesystems.py 和 handlers.py# 修改filesystems.py文件# 将原本的"utf-8"修改成"gbk"(windows支持的gbk类型的bytes)503          yield line.encode('gbk', self.cmd_channel.unicode_errors# 修改 handlers.py 文件# 将原本的"utf-8"修改成"gbk"(windows支持的gbk类型的bytes)1413         return bytes.decode('gbk', self.unicode_errors)

编写并运行FTP代码

# 该脚本程序是运行在windows上的ftp,运行前需要安装pyftpdlib模块, pip3 install pyftpdlib# 修改filesystems.py文件,将503 行的 "utf-8"修改成"gbk"(windows支持的gbk类型的bytes)即 yield line.encode('gbk', self.cmd_channel.unicode_errors# 修改 handlers.py 文件,将1413行的"utf-8"修改成"gbk"(windows支持的gbk类型的bytes)即 return bytes.decode('gbk', self.unicode_errors)from pyftpdlib.authorizers import DummyAuthorizerfrom pyftpdlib.handlers import FTPHandler,ThrottledDTPHandlerfrom pyftpdlib.servers import FTPServerfrom pyftpdlib.log import LogFormatterimport logging# 1.记录日志输出到文件和终端logger = logging.getLogger('FTP-LOG')logger.setLevel(logging.DEBUG)cs = logging.StreamHandler()cs.setLevel(logging.INFO)fs = logging.FileHandler(filename='test.log', mode='a', encoding='utf-8')fs.setLevel(logging.DEBUG)formatter = logging.Formatter('[%(asctime)s] %(name)s - %(levelname)s : %(message)s')cs.setFormatter(formatter)fs.setFormatter(formatter)logger.addHandler(cs)logger.addHandler(fs)# 2.实例化虚拟用户,这是FTP的首要条件authorizer = DummyAuthorizer()# 3.添加用户权限和路径,括号内的参数是(用户名、密码、用户目录、权限),可以为不同的用户添加不同的目录和权限authorizer.add_user('user', '123456', "d:/", perm="elradfmw")# 4.添加匿名用户,只需要路径authorizer.add_anonymous("d:/")# 5.初始化ftp句柄handler = FTPHandlerhandler.authorizer = authorizer# 6.添加被动端口范围handler.passive_ports = range(2000,20033)# 7.上传下载的速度设置dtp_handler = ThrottledDTPHandlerdtp_handler.read_limit = 300 * 1024          # 300 kb/sdtp_handler.write_limit = 300 * 1024         # 300 kb/shandler.dtp_handler = dtp_handler# 8.监听ip和端口 , linux里需要root用户才能使用21端口server = FTPServer(('0.0.0.0', 21), handler)# 9.最大连接数server.max_cons = 150server.max_cons_per_ip = 15# 10.开始服务,自带打印日志信息server.serve_forever()

authorizer.add_user(‘user', ‘123456', “d:/”, perm=“elradfmw”)中perm权限参数的含义:
1、读权限:

e :改变文件目录
l :列出文件
r :从服务器接收文件
2、写权限

a :文件上传
d :删除文件
f :文件重命名
m :创建文件
w :写权限
M:文件传输模式(通过FTP设置文件权限)
5.使用CMD登入FTP验证
使用正常,认证正常

python如何搭建FTP服务器

三、编写FTP客户端程序

可以用于文件的上传下载

[root@localhost python]# vim ftp.py #!/bin/env python3# -*- coding: utf-8 -*-# Time: 2021-5-15 21:08# Description: FTP CLIENT# File Name: ftp.py# FTP客户端from ftplib import FTP# 1.登入ftpftp = FTP(host='192.168.0.108', user='user', passwd='123456')# 设置编码方式,由于在windows系统,设置编码方式为gbk'ftp.encoding = 'gbk'# 切换目录ftp.cwd('test')# 列出文件夹内容ftp.retrlines('LIST')     # 或者ftp.dir()# 下载文件 node.txtftp.retrbinary('RETR node.txt', open('node.txt', 'wb').write)# 上传文件ftpserver.pyftp.storbinary('STOR ftpserver.py', open('ftpserver.py', 'rb'))# 查看目录下文件详情for file in ftp.mlsd(path='/test'):    print(file)

执行结果:

[root@localhost python]# ./ftp.py
# 列出了test文件夹中的内容
-rw-rw-rw- 1 owner group 1661 May 15 14:19 ftpserver.py
-rw-rw-rw- 1 owner group 12 May 15 14:14 node.txt
# 查看到了目录下文件的详情
('ftpserver.py', {'modify': '20210515142003', 'perm': 'radfw', 'size': '1661', 'type': 'file'})
('node.txt', {'modify': '20210515141442', 'perm': 'radfw', 'size': '12', 'type': 'file'})
[root@localhost python]# ls # node.txt文件被下载到客户端
ftp.py ftpserver.py node.txt

到windows的test目录下验证

ftpserver.py文件被上传到服务端

python如何搭建FTP服务器

python的五大特点是什么

python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。

感谢你能够认真阅读完这篇文章,希望小编分享的“python如何搭建FTP服务器”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯