需求:创建一个ftp服务器,并在一定时间内退出
过程:本人小白,通过多方查找资料,完美实现。
感谢大佬们的付出,本人只是复制粘贴,留存学习。
废话不说,上代码。不足之处请多指正!
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import ThreadedFTPServer
from threading import Timer, Thread
import socket
class MyFtp:
def __init__(self, ftp_folder, port=2121):
"""ftp_folder:ftp服务器根文件"""
#实例化虚拟用户,这是FTP验证首要条件
authorizer = DummyAuthorizer()
#添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限)
authorizer.add_user('user', 'name', ftp_folder, perm='elradfmwMT')
#添加匿名用户 只需要路径
#authorizer.add_anonymous('/home/huangxm')
#初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer
#添加被动端口范围
handler.passive_ports = range(1120, 2122)
#获取本机IP
my_IP = socket.gethostbyname(socket.gethostname())
#监听ip 和 端口
self.server = ThreadedFTPServer((my_IP, port), handler)
# set a limit for connections
self.max_cons = 8 # 最大连接数
self.max_cons_per_ip = 3 # 每个ip允许的最大连接数
def _run_server(self):
self.server.serve_forever()
def start(self):
srv = Thread(target=self._run_server)
# srv.deamon = True
srv.start()
def stop(self):
self.server.close_all()
if __name__ == "__main__":
myfpt = MyFtp(r'F:\LaoMaoTao')
myfpt.start()
#创建定时器对象
timer = Timer(0.5*60, myfpt.stop) # 0.5*60表示30秒后停止ftp
#启动定时器
timer.start()