创建 FTP_Server.py,输入如下内容
# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import json
import os
def get_conf():
"""
读取配置文件,获取参数
:return:
"""
with open("./confg_FTP.json", "r")as fp:
json_conf = fp.read()
return json.loads(json_conf)
def create_path(path):
"""
Check path exists ,if not exists make it
:param path: path
:return:
"""
if not os.path.exists(path) and os.path.isabs(path):
os.makedirs(path)
def server():
"""
创建FTP服务
:return:
"""
conf_json = get_conf()
# 实例化DummyAuthorizer来创建ftp用户
authorizer = DummyAuthorizer()
# 参数:用户名,密码,目录,权限
username, password, homedir = conf_json["ftp_user"], conf_json["ftp_pwd"], conf_json["ftp_server_save_file"]
authorizer.add_user(username, password, homedir, perm='elradfmwMT')
# 匿名登录
# authorizer.add_anonymous(server_save_file)
handler = FTPHandler
handler.authorizer = authorizer
# 参数:IP,端口,handler
IP = conf_json["ftp_host"]
port = conf_json["ftp_port"]
server = FTPServer((IP, port), handler)
server.serve_forever()
if __name__ == '__main__':
server()
将 FTP_Server.py 部署在Linux上,并且在同文件夹下新建 confg_FTP.json 输入
{
"ftp_host": "192.168.136.128",
"ftp_port": 21,
"ftp_server_save_file": "/home/jiaohaicheng/FTPServer"
}
安装 pyftpdlib pip install pyftpdlib
Linux 预装好python环境
命令行输入 python FTP_Server.py
出现类似如下,表示成功
┌──(root㉿kali)-[/home/jiaohaicheng/FTP_Server]
└─# python FTP_Server.py
[I 2022-10-02 05:48:08] concurrency model: async
[I 2022-10-02 05:48:08] masquerade (NAT) address: None
[I 2022-10-02 05:48:08] passive ports: None
[I 2022-10-02 05:48:08] >>> starting FTP server on 192.168.136.128:2101, pid=16757 <<<
本地新建py文件,FTP客户端,输入:
# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: client.py
@time: 2022/10/01/ 20:06
@desc:
"""
import ftplib
import os
def get_files_under_path(path):
"""
获取路径下所有文件的绝对路径
:param path: 根路径
:return: 路径下文件绝对路径列表
"""
try:
if os.path.exists(path) and os.path.isabs(path):
files_path_lis = []
for path, dir_lis, file_lis in os.walk(path):
if len(file_lis) > 0:
for file in file_lis:
files_path_lis.append(os.path.join(path, file))
return files_path_lis
except Exception as e:
print(e, e.__traceback__.tb_lineno)
def upload(fname):
if os.path.isfile(fname):
print("uploading is about to start:{}".format(fname))
with open(fname, "rb")as fp:
try:
file_name, file_tail = os.path.split(fname)[-1].split(".")
up_name = input("Please enter the file name after uploading:")
if up_name == "":
up_name = file_name
else:
pass
ftp.storbinary("STOR {}.{}".format(up_name, file_tail), fp)
except Exception as e:
print("{} {}".format(fname, e))
# 上传文件夹下内容到指定目录
elif os.path.isdir(fname):
file_dir_lis = get_files_under_path(fname)
for file in file_dir_lis:
upload(file)
else:
raise ValueError("fname is not compliance")
# 文件下载
def download(server_name):
if isinstance(server_name, str):
print("About to start downloading:{}".format(server_name))
try:
file_name, file_tail = os.path.split(server_name)[-1].split(".")
host_file = input(
"Please enter the local saving path of the file to download:")
if host_file == "":
host_file = "{}.{}".format(file_name, file_tail)
else:
pass
fd = open(host_file, 'wb')
ftp.retrbinary("RETR %s" % server_name, fd.write)
except Exception as e:
print("{} {}".format(server_name, e))
if isinstance(server_name, list):
for server_file in server_name:
download(server_file)
def main():
op = input("what do you want?(u(上传)/d(下载)/q(退出))")
if op == "u":
fname = input("Please enter the file path to upload:")
upload(fname)
ftp.close()
print("upload finished")
elif op == "d":
ftp.dir(ftp.pwd())
server_name = input(
"Please enter the file name and directory to download:")
download(server_name)
ftp.close()
print("download finished")
elif op == "q":
print("quit now!")
ftp.quit()
if __name__ == '__main__':
server_address = "192.168.136.1"
print(server_address)
# 创建FTP实例,并显示欢迎界面
ftp = ftplib.FTP(host=server_address)
ftp.login('JHC', '123456')
print(ftp.getwelcome())
# 登录,输入服务器里添加过的用户名和口令
main()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156890.html