python之ftp小工具

文章目录

python之FTP小工具

  • 源码
#!/usr/bin/python3
import os
import sys
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler, ThrottledDTPHandler
from pyftpdlib.servers import FTPServer
import logging


def main(username, password, port, user_dir):
    # 创建一个用户授权管理器
    authorizer = DummyAuthorizer()

    # 添加一个用户,用户名为传入的username,密码为传入的password,用户目录为传入的user_dir,权限为读写
    authorizer.add_user(username, password, user_dir, perm="elradfmw")

    # 添加一个匿名用户,用户目录为用户主目录下的"nobody"文件夹,权限为只读
    nobody_dir = os.path.join(user_dir, "nobody")
    if not os.path.exists(nobody_dir):
        os.mkdir(nobody_dir)
    authorizer.add_anonymous(nobody_dir, perm="elr")

    # 初始化FTP处理器并设置用户授权管理器
    handler = FTPHandler
    handler.authorizer = authorizer
    # handler.masquerade_address = nat_ip


    # 设置上传和下载速度限制(单位:字节/秒)
    dtp_handler = ThrottledDTPHandler
    dtp_handler.read_limit = 30720000
    dtp_handler.write_limit = 30720000
    handler.dtp_handler = dtp_handler

    # 创建FTP服务器并绑定到指定地址和端口
    server = FTPServer(("0.0.0.0", port), handler)


    # 配置日志记录
    logging.basicConfig(filename='ftp.log', level=logging.INFO)

    # 启动FTP服务器
    server.serve_forever()

if __name__ == "__main__":
    if len(sys.argv) != 5:
        print("============ python local network ftp server =====================")
        print("Usage:  script in parameter <username> <password> <port> <ftp_dir>")
        print("==================================================================")
        sys.exit(1)

    username = sys.argv[1]
    password = sys.argv[2]
    port = int(sys.argv[3])
    user_dir = sys.argv[4]
    main(username, password, port, user_dir)
  • 使用方法
[devops@my-dev pyftp]$ ./pyftp
PyInstaller/loader/pyimod03_importers.py:495: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
============ python local network ftp server =====================
Usage:  script in parameter <username> <password> <port> <ftp_dir>
==================================================================

[devops@my-dev pyftp]$ ./pyftp   zhaosan 123456  10010  ./  
[devops@my-dev pyftp]$ tail -100f ftp.log 
INFO:pyftpdlib:concurrency model: async
INFO:pyftpdlib:masquerade (NAT) address: None
INFO:pyftpdlib:passive ports: None
INFO:pyftpdlib:>>> starting FTP server on 0.0.0.0:10010, pid=9185 <<<
INFO:pyftpdlib:concurrency model: async
INFO:pyftpdlib:masquerade (NAT) address: None
INFO:pyftpdlib:passive ports: None
INFO:pyftpdlib:>>> starting FTP server on 0.0.0.0:10010, pid=9185 <<<
INFO:pyftpdlib:127.0.0.1:45808-[] FTP session opened (connect)
INFO:pyftpdlib:127.0.0.1:45808-[zhaosan] USER 'zhaosan' logged in.
INFO:pyftpdlib:127.0.0.1:45808-[zhaosan] RETR /home/devops/Python/pyftp/pyftp.py completed=1 bytes=1937 seconds=0.001
INFO:pyftpdlib:127.0.0.1:45808-[zhaosan] CWD /home/devops/Python/pyftp/dist 250
INFO:pyftpdlib:127.0.0.1:45808-[zhaosan] STOR /home/devops/Python/pyftp/dist/pyftp.py completed=1 bytes=1937 seconds=0.001
INFO:pyftpdlib:127.0.0.1:45808-[zhaosan] FTP session closed (disconnect).
INFO:pyftpdlib:received interrupt signal
INFO:pyftpdlib:>>> shutting down FTP server, 1 socket(s), pid=9185 <<<
  • 客户端登录使用
[root@my-dev ~]# ftp 127.0.0.1 10010
Connected to 127.0.0.1 (127.0.0.1).
220 pyftpdlib 1.5.9 ready.
Name (127.0.0.1:root): zhaosan
331 Username ok, send password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering passive mode (127,0,0,1,130,21).
125 Data connection already open. Transfer starting.
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:49 __pycache__
drwxrwxr-x   3 devops   devops       4096 Feb 20 02:39 build
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:49 dist
-rw-rw-r--   1 devops   devops       5244 Feb 20 02:51 ftp.log
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:17 nobody
-rwxr-xr-x   1 devops   devops   12483864 Feb 20 02:50 pyftp
-rwxrwxr-x   1 devops   devops       1937 Feb 20 02:49 pyftp.py
-rw-rw-r--   1 devops   devops        996 Feb 20 02:49 pyftp.spec
226 Transfer complete.
ftp> get  pyftp.py
local: pyftp.py remote: pyftp.py
227 Entering passive mode (127,0,0,1,134,239).
125 Data connection already open. Transfer starting.
226 Transfer complete.
1937 bytes received in 0.000178 secs (10882.02 Kbytes/sec)
ftp> ls
227 Entering passive mode (127,0,0,1,148,227).
125 Data connection already open. Transfer starting.
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:49 __pycache__
drwxrwxr-x   3 devops   devops       4096 Feb 20 02:39 build
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:49 dist
-rw-rw-r--   1 devops   devops       5362 Feb 20 02:51 ftp.log
drwxrwxr-x   2 devops   devops       4096 Feb 20 02:17 nobody
-rwxr-xr-x   1 devops   devops   12483864 Feb 20 02:50 pyftp
-rwxrwxr-x   1 devops   devops       1937 Feb 20 02:49 pyftp.py
-rw-rw-r--   1 devops   devops        996 Feb 20 02:49 pyftp.spec
226 Transfer complete.
ftp> cd dist
250 "/dist" is the current directory.
ftp> ls
227 Entering passive mode (127,0,0,1,151,168).
125 Data connection already open. Transfer starting.
-rwxr-xr-x   1 devops   devops   12483864 Feb 20 02:49 pyftp
226 Transfer complete.
ftp> put  pyftp.py
local: pyftp.py remote: pyftp.py
227 Entering passive mode (127,0,0,1,207,205).
125 Data connection already open. Transfer starting.
226 Transfer complete.
1937 bytes sent in 2.8e-05 secs (69178.57 Kbytes/sec)
ftp> 
  • 二进制文件下载

    https://gitee.com/devops_zhao/mix_tools/raw/master/pyftp

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python FTP服务器是使用Python语言编写的用于提供文件上传和下载功能的服务器。可以使用pyftpdlib模块来搭建Python FTP服务器。首先,需要安装pyftpdlib模块,并找到pyftpdlib模块源文件所在目录。然后,通过编写并运行FTP代码,启动FTP服务器。最后,可以使用CMD命令行工具登录FTP并进行验证。 为了搭建Python FTP服务器,可以按照以下步骤进行操作: 1. 安装pyftpdlib模块: 打开命令行窗口,运行以下命令安装pyftpdlib模块: ``` pip install pyftpdlib ``` 2. 找到pyftpdlib模块源文件所在目录: 在命令行窗口中运行以下Python代码: ``` import pyftpdlib print(pyftpdlib.__path__) ``` 3. 进入pyftpdlib目录: 使用cd命令进入pyftpdlib模块源文件所在的目录。 4. 编写并运行FTP代码: 在pyftpdlib目录下创建一个Python脚本,编写FTP服务器的代码,例如: ``` from pyftpdlib import FTPServer # 创建FTP服务器实例 server = FTPServer(('0.0.0.0', 21), handler) # 启动FTP服务器 server.serve_forever() ``` 5. 使用CMD登录FTP验证: 打开CMD命令行窗口,使用以下命令登录FTP服务器: ``` ftp <服务器IP地址> ``` 然后输入用户名和密码进行验证。 这样,你就可以搭建一个Python FTP服务器,并使用FTP客户端进行文件的上传和下载。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python --搭建FTP服务器](https://blog.csdn.net/CN_LiTianpeng/article/details/116855645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的运维之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值