使用pyftpdlib搭建ftp服务器

ftp主动模式:控制平面建立后,数据平面是由服务器20端口反向连接客户端

ftp被动模式:控制平面建立后,数据平面由客户端连接服务器端指定的其他端口(需要防火墙开启服务器端额外的指定端口)

 

代码(来自官网):

1,服务器端  -  主动模式

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

authorizer = DummyAuthorizer()
authorizer.add_user("user", "12345", "/home/bridge", perm="elradfmwMT")
authorizer.add_anonymous("/home/nobody")

handler = FTPHandler
handler.authorizer = authorizer

# handler.passive_ports = range(10000, 10005)  # 被动模式
server = FTPServer(('', 8888), handler)   # 控制端口用8888,非默认21
server.serve_forever()

也可以一条命令解决:

python3 -m pyftpdlib -w -d [PATH] -u [USER] -P [PASSWORD]

 centos需要开启相应端口(开放8888端口):

/sbin/iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

 

2,客户端 - 主动模式

2.1,CMD

CMD登录:ftp user:12345@x.x.x.x 8888

登录完成后可以自由切换目录,但是执行put/get或者ls命令时,提示227 Entering passive mode

切换主动模式: ftp:> passive

但是切换后操作相关命令直接卡住

 

2.2,xftp

xftp连接时,选项中,把“使用被动模式”打勾去掉,可以顺利连接,显示/切换目录,上传/下载文件

但是上传文件时,只能传一个,第二个文件会一直在进行中

 

3,服务器 - 被动模式

代码中添加一句:

handler.passive_ports = range(10000, 10005)  # 被动模式

即数据传输由客户端连接服务器端10000-10005的端口

防火墙开启相应端口

 

4,客户端 - 被动模式

4.1,CMD

一切正常

 

4.2,xftp

xftp连接时,选项中,把“使用被动模式”打上勾(默认有勾)

但是上传文件时,只能传第一个和第三个,其他文件都是正在进行中

 

posted @ 2021-02-28 11:00  GUXH  阅读(947)  评论(0编辑  收藏  举报