# uftpd **Repository Path**: uloong6/uftpd ## Basic Information - **Project Name**: uftpd - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-27 - **Last Updated**: 2026-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # uftpd — 轻量级单线程非阻塞 FTP 服务器 uftpd 是面向嵌入式 / 资源受限平台的极简 FTP 服务器: **单个 C 文件 + 单线程 select 事件循环 + 全非阻塞 IO,零外部依赖**。 ## 特性 - **单线程非阻塞**:select 事件驱动,无多线程 / 无锁,天然无竞态 - **控制连接输出队列**:非阻塞 send 大流量不丢响应 - **PASV / PORT 双模式**:PORT 防 FTP bounce(目标 IP 必须等于控制连接对端) - **REST STREAM 断点续传**:RETR / STOR 均支持续传与续写 - **命令齐全**:SIZE / NLST / LIST / RNFR+RNTO / MKD / RMD / DELE / FEAT / ABOR - **路径沙箱**:`..` 与符号链接越狱均被 realpath 前缀校验拦截 - **健壮性**:会话超时(默认 120s)、4 会话上限、粘包 / 半包命令缓冲、客户端异常断开(RST/中断)不崩 - **可选文件日志**:`UFTPD_LOG` 环境变量 - **体积小**:约 1000 行 C,静态编译后 < 60KB ## 编译 需要 gcc(或任意 C99 编译器): ```bash make # 或 gcc -O2 -Wall -Wextra -o uftpd uftpd.c main.c ``` ## 运行 ```bash ./uftpd [root] # 默认根目录 /sdcard,监听 8021 UFTPD_LOG=/tmp/uftpd.log ./uftpd /srv/ftp # 可选文件日志 ``` 默认账号 `admin/admin`(启动时打印默认凭据警告)。 可通过修改 `uftpd.c` 顶部全局变量或外部链接覆盖 `ftp_user` / `ftp_pass` / `do_ftp` / `home`。 ## 测试 ```bash python3 test/test_uftpd.py # 29 项:登录/基本命令/PASV+PORT 双模式传输/REST 续传/穿越防护/覆盖截断 python3 test/fs_test.py # 13 项:超时/空格与中文文件名/覆盖修改/改名删除 python3 test/int2_test.py # 15 项:RST/粘包/中断风暴/4 会话占满 ``` ## 兼容性 - 依赖标准 POSIX 接口:`select` / `realpath` / `fcntl` / `getpeername` 等 - 已验证:Linux(gcc -O2 -Wall -Wextra 零警告),可移植到 ESP-IDF 等 newlib 环境 ## 许可 [MIT](LICENSE) Copyright (c) 2026 uloong6