python之FTP小工具
| |
| 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() |
| |
| |
| authorizer.add_user(username, password, user_dir, perm="elradfmw") |
| |
| |
| 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") |
| |
| |
| handler = FTPHandler |
| handler.authorizer = authorizer |
| |
| |
| |
| |
| dtp_handler = ThrottledDTPHandler |
| dtp_handler.read_limit = 30720000 |
| dtp_handler.write_limit = 30720000 |
| handler.dtp_handler = dtp_handler |
| |
| |
| server = FTPServer(("0.0.0.0", port), handler) |
| |
| |
| |
| logging.basicConfig(filename='ftp.log', level=logging.INFO) |
| |
| |
| 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> |
本文由mdnice多平台发布
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫