FTP操作记录

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路FTP操作记录,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

创建 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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!