Loki文件传输模块深度解析:SFTP通道如何实现远程文件双向上传下载
【免费下载链接】LokiRemote Access Tool项目地址: https://gitcode.com/gh_mirrors/loki1/Loki
Loki 是一款简单的远程访问工具(Remote Access Tool),其文件传输模块是整套系统的亮点:通过一条独立的 SSL 加密 SFTP 通道,主控端一条upload命令即可把文件推送到远程机器,download命令即可把远程文件取回本地,轻松实现远程文件双向传输。
🧩 两套通道各司其职:为什么文件传输不走命令通道
Loki 采用经典的"主控–机器人"(server–bot)双端架构,通信上有两条独立通道:
- 命令通道:bot 连上服务器后保持长连接,双方用 JSON 格式的
{code, args}指令交互,全程基于 RSA-2048 交换密钥 + AES-256 加密,只负责"截屏""开 SSH"这类轻量指令; - 文件通道:文件流数据量大,Loki 不把它塞进命令通道,而是单独开放一个 SFTP 端口(默认
128,定义在 lib/const.py)。两端用原生 TCP + SSL 套接字完成文件流传输。
这种"命令通道只传令、文件通道只运货"的分离设计,是理解 Loki 文件传输模块的关键。
🖥️ 快速上手:三步让文件传输通道可用
- 配置网络参数:修改 lib/const.py 中的
PRIVATE_IP/PUBLIC_IP与FTP_PORT(若远程机器在局域网外,需要在路由器上转发FTP_PORT、SSH_PORT及服务器端口); - 启动服务器:
pip install -r requirements.txt安装依赖,运行 loki.py,访问http://localhost:5000,默认账号loki/ikol; - 连接远程机器:生成 payload 并在目标机器执行,bot 上线后会出现在控制台的 Bots 列表中。
📤 上传文件到远程机器:upload 命令的完整链路
在命令控制台输入upload <file>即可触发整个上传流程(命令定义见 static/js/command.js):
- 传令:服务器通过命令通道向 bot 发送命令码
3+ 文件名; - 建监听:服务器端 lib/server/lib/sftp.py 绑定
FTP_PORT,启动一次性临时监听; - 握手验证:bot 端 agent/bot/lib/sftp.py 发起 SSL 客户端连接,发送测试串
abc123并要求对端回显——即隧道检测,确保通道真正双向可用; - 流式传输:先发送文件名,再按 64KB 分块把文件内容逐块写出(分块读写逻辑在 lib/server/lib/file.py),最后关闭连接并记录耗时。
📥 从远程机器取回文件:download 与截屏共用同一条管线
download <file>是镜像流程:服务器发送命令码4,bot 主动拨号接入 SFTP 端口,把目标文件流式读回,服务器将数据落盘到downloads/files/目录(接收逻辑见 lib/server/lib/sftp.py,落盘路径见 lib/const.py)。
截屏回传也复用同一条管线:命令码5触发 bot 截图后经上传通道推送,服务器在downloads/screenshots/下按时间戳保存。也就是说上传、下载、截屏三者共用同一条 SSL 文件通道。
📊 传输进度监控:ftp_status 与 --override 双保险
文件传输在后台线程中执行,控制台因此提供了两个配套命令:
ftp_status:实时查询"正在上传/下载哪个文件",结束后还会显示是否成功与耗时(实现见 lib/server/lib/interface.py);--override:已有传输在途时,新请求会被拒绝,使用download blueprint.pdf --override可强制覆盖旧进程。
🔒 值得注意的工程细节
- 命名视角相反:服务器端
sFTP类中send()表示"上传到远程机器"、recv()表示"从远程取回";而 bot 端 agent/bot/lib/shell.py 的命令映射恰好相反(3: download, 4: upload)。先理解这一点,读源码能少走一半弯路; - 超时保护:服务器端监听默认等待 60 秒(lib/server/lib/interface.py),bot 未及时接入会标记错误码并自动清理;
- 一次性套接字:每次传输结束后服务器通过
socket_closed()探测确认临时监听已关闭,避免端口占用; - 独立证书体系:文件通道使用本地
cert/public.crt/private.key做 SSL 握手,与命令通道的加密体系互不干扰。
📁 相关文件速查
| 模块 | 路径 | 职责 |
|---|---|---|
| 服务器端文件通道 | lib/server/lib/sftp.py | 监听、流式收发、隧道检测 |
| bot 端文件通道 | agent/bot/lib/sftp.py | 主动拨号、分块读写 |
| 命令调度 | lib/server/lib/interface.py | FTP 封装、ftp_status、--override |
| bot 命令映射 | agent/bot/lib/shell.py | 以命令码 3/4/5 执行上传/下载/截屏 |
| 分块文件读写 | lib/server/lib/file.py | 64KB 分块流式读写 |
| 网络与路径配置 | lib/const.py | FTP_PORT、下载落盘路径 |
Loki 文件传输模块的设计思路可以一句话概括:让轻量命令通道负责调度,让加密文件通道负责搬运,让一次性套接字保证每次传输干净可追溯——这也是它在实现上既简洁又可靠的根本原因。
【免费下载链接】LokiRemote Access Tool项目地址: https://gitcode.com/gh_mirrors/loki1/Loki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考