
MultiScanner REST API深度解析如何用curl构建批量上传与报告拉取的自动化流水线【免费下载链接】multiscannerModular file scanning/analysis framework项目地址: https://gitcode.com/gh_mirrors/mu/multiscannerMultiScanner 是一个开源的模块化文件扫描/分析框架内置 RESTful APIFlask 应用默认端口 8080。本文面向新手讲解如何用 curl 命令完成文件上传、任务查询、报告拉取并搭建一套批量上传 → 轮询状态 → 自动下载报告的自动化流水线无需编写任何 Python 代码。一、先认识 MultiScanner 的 REST APIMultiScanner 的 REST API 由一个 Flask 应用提供源码位于 multiscanner/distributed/api.py完整的端点清单记录在 docs/use/rest-api.rst。对自动化流水线来说最核心的 4 个端点是方法URI作用POST/api/v1/tasks上传文件返回任务 IDHTTP 201GET/api/v1/tasks/task_id查询任务状态GET/api/v1/tasks/task_id/report拉取 JSON 报告GET/api/v1/tasks/task_id/pdf拉取 PDF 报告其他实用端点还包括GET /api/v1/tasks列出所有任务GET /api/v1/modules查看可用扫描模块及其启用状态GET /api/v1/tasks/sha256/sha256用样本哈希反查最近一次扫描的任务 IDGET /api/v1/tasks/search按样本搜索报告走 ElasticsearchDELETE /api/v1/tasks/task_id删除任务所有端点默认开启 CORS允许来自 localhost 任意端口的请求如需调整修改 API 配置文件中api段的cors设置即可。如上图所示你通过 REST API 提交文件后系统会把任务放入任务管理队列由 Worker 节点拉取执行扫描扫描结果写入 Elasticsearch任务状态更新到 PostgreSQL。理解这条链路后你就明白了为什么上传是异步的——POST 成功只代表入队成功报告要等扫描完成。二、curl 上传文件一条命令拿任务 ID官方文档给出的最小示例curl -i -X POST http://localhost:8080/api/v1/tasks -F file/path/to/sample返回201 Created响应体形如{Message: {task_ids: [42]}}task_ids数组就是后续拉取报告的钥匙。注意这些常用表单字段用-F追加modules指定本次启用的扫描模块逗号分隔模块名archive-analyzetruearchive-passwordxxx自动解包 zip/rar 并扫描每个内部文件响应中会返回多个 task_idduplicaterescan或duplicatelatest遇到相同哈希样本时重新扫描或复用结果其他任意自定义字段如Submitter Name会作为元数据随任务存储三、批量上传用 shell 循环替代 Python 脚本批量场景下不需要写任何 Python 代码一个 bash 循环即可。假设/samples/下有几百个待检文件BASEhttp://localhost:8080/api/v1 mkdir -p /reports for f in /samples/*; do resp$(curl -s -X POST $BASE/tasks -F file$f -F modulesClamAVScan,SHA256,YaraScan) # 从响应里提取任务ID tid$(echo $resp | sed -n s/.*task_ids: \[\([0-9]*\)\].*/\1/p) echo $f - $tid /reports/ids.txt done两点提醒别打太快。API 配置中有batch_size默认 100和batch_interval默认 60 秒系统会批量消费队列上传过快只会堆积在队列里不必担心丢失。上传 zip 包并加archive-analyzetrue时一次请求就会返回多个任务 ID循环里要按逗号拆分全部保存。四、轮询任务状态判断报告何时就绪上传后进入等扫描阶段。用任务 ID 轮询curl -s http://localhost:8080/api/v1/tasks/42返回的 JSON 中包含任务状态字段。一个稳健的轮询模板for tid in $(cut -d -f3 /reports/ids.txt); do while true; do st$(curl -s $BASE/tasks/$tid | grep -o task_status: [^]* || echo scanning) case $st in *Complete*) break;; *Failed*|*error*) echo task $tid failed; break;; esac sleep 10 done # 拉报告 curl -s -o /reports/$tid.json $BASE/tasks/$tid/report?dt curl -s -o /reports/$tid.pdf $BASE/tasks/$tid/pdf done说明report?dt让接口以附件形式返回原始 JSON 报告不带参数则返回经过预处理的、供 Web 界面展示的 JSON会去掉冗余字段、注入超链接。/pdf直接生成该报告的 PDF 版本文件名自动为task_id.pdf。还需要可交换情报格式时可拉取 STIX2 BundleGET /api/v1/tasks/task_id/stix2?prettytcustom_labelsA,B源码见 multiscanner/common/stix2_generator/。五、进阶技巧按哈希找报告、批量下载样本已知哈希查任务 ID。如果样本已经扫过直接跳过上传sha256sum sample.bin | awk {print $1} curl -s $BASE/tasks/sha256/sha256值 # {TaskID: 42}按任务 ID 批量回捞样本。多任务样本可一次打包成加密 zip 下载zip 密码固定为infectedcurl -s -o bundle.zip $BASE/tasks/files?task_ids42,43,44单个样本也可以用哈希直接取GET /api/v1/files/sha256?rawtrawt返回原始二进制默认返回加密 zip。清理报告归档完成后删除任务curl -s -X DELETE $BASE/tasks/42也可以在 API 配置中加delete_after_scan True让系统在扫描完成后自动删除样本文件。六、常见问题排查返回 404No task or report with that ID found!任务 ID 写错或任务已被删除。返回 400Cannot import report...只出现在upload_typeimport导入历史报告场景检查 JSON 中是否有合法的Scan Time字段。浏览器里调 API 报跨域默认 CORS 只放行 localhost服务器端部署时需调整cors配置。轮询一直是排队状态查看 Web 端multiscanner/web/的系统健康页确认 Celery worker 与 Elasticsearch 正常运行。总结MultiScanner 的 REST API 设计得很命令行友好上传拿 ID、按 ID 拉报告两条 curl 就能串起整条流水线。配合 shell 循环与轮询你获得的是一条完全无需 Python 的自动化分析链路——批量投喂样本、自动归档 JSON/PDF/STIX2 报告、按哈希去重。更多端点细节可查阅 docs/use/rest-api.rst 与 docs/use/python-api.rstAPI 源码在 multiscanner/distributed/api.py。【免费下载链接】multiscannerModular file scanning/analysis framework项目地址: https://gitcode.com/gh_mirrors/mu/multiscanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考