资讯动态

Arkime 命令行查询工具 moloch_query 实战指南:基于 Elasticsearch 元数据的两阶段会话搜索与全包检索

发布时间:2026/9/28 7:26:39 来源:尧图企业网站定制
网络安全网络后端数据可视化【免费下载链接】arkimeArkime is an open source, large scale, full packet capturing, indexing, and database system.项目地址https://gitcode.com/gh_mirrors/ar/arkime点击查看免费下载contrib/moloch_query是 Arkime原 Moloch仓库中附带的一个 Python 3 命令行工具它让你不依赖 Web 界面即可完成两类核心工作先利用 Elasticsearch 中的会话元数据快速缩小搜索范围第一阶段再按需下载并检索会话的完整 PCAP 数据第二阶段。读完本文你将掌握该工具的安装方式、全部命令行参数、两阶段工作流的调用原理以及它如何与 Arkime viewer 的/api/buildquery和/api/sessions.pcap接口协同工作。工具定位为什么需要命令行查询Arkime 的正常查询入口是 Web UIviewer。但当你需要把「某个时间窗口内、符合特定表达式如host.http *.yopmail.com的所有会话」批量导出成 TSV或在原始 PCAP 字节上做正则匹配时命令行工具比手工操作 UI 更高效、更适合脚本化。moloch_query正是为此设计的它复用 Arkime 的查询语法与字段体系把查询翻译、Elasticsearch 滚动分页、PCAP 下载、正则过滤、TSV 输出封装成一条命令。文档与脚本本体位于仓库 contrib/moloch_query.md 与 contrib/moloch_query。依赖安装moloch_query是纯 Python 3 脚本依赖两个 Python 包pip3 install requests elasticsearchelasticsearch用于直连 Elasticsearch执行元数据搜索与 scroll 滚动分页requests用于与 Arkime viewer 的 HTTP API 交互会话查询构建、PCAP 下载并基于HTTPDigestAuth完成摘要式身份认证见脚本 contrib/moloch_query 中的auth HTTPDigestAuth(args.apiuser, args.apipass)。两阶段工作模式先元数据、再全包文档明确强调moloch_query采用两阶段two-phase策略获取数据第一阶段——元数据搜索用 Elasticsearch 中的会话元数据索引中的 session 文档把候选会话数量大幅收窄。这一阶段快因为只查元数据不碰 PCAP 文件。第二阶段——全包搜索/输出可选对第一阶段命中的会话逐个下载完整 PCAP再做正则匹配或原样输出。这一阶段慢得多所以「构造一个好的元数据过滤器」是控制搜索代价的关键——第一阶段的命中数量直接决定了第二阶段要下载多少份 PCAP。输出行为也有明确约定结果每处理完一页默认 1000 条见-p选项就写入stdout所有诊断与进度信息如Getting fields from elasticsearch、进度百分比写入stderr。这保证了重定向 out.tsv时 stdout 是纯净的数据流。元数据搜索计数与 TSV 输出仅计数模式若不提供-f输出字段工具只返回匹配记录的总数 /opt/moloch_tools/moloch_query --apiuser user --apipass pass --molurl https://localhost:8005 --esurl http://localhost:9200 -s 2017-10-11 00:00:00 -e 2017-10-11 11:59:59 -q host.http *.yopmail.com 626这里-q使用与 Arkime UI 完全相同的查询语法host.http *.yopmail.com-s/-e限定时间窗口。从源码看contrib/moloch_query 的process_sessions当未请求任何字段时工具直接打印 Elasticsearch 返回的hits.total后立即退出。字段输出TSV与表头用-f指定逗号分隔的字段列表输出 TSV 到 stdout加--headers则首行输出表头。字段名必须是 Arkime 允许输出的字段可用-l即--listfields列出全部合法字段 /opt/moloch_tools/moloch_query --apiuser user --apipass pass --molurl https://localhost:8005 --esurl http://localhost:9200 -s 2017-10-11 00:00:00 -e 2017-10-11 11:59:59 -f http.uri.path,host.http,tags -q host.http *.yopmail.com out.tsv 2017-10-16 15:17:37.747518 Getting fields from elasticsearch 2017-10-16 15:17:37.908664 Done. 2017-10-16 15:17:38.898286 100% : 626 sessions of 626, Elapsed: 0:00:01.150763, Remaining: 0:00:00输出细节来自 contrib/moloch_query 的print_tsv值得留意字段id是特例取值来自 Elasticsearch 的_id值为列表时以逗号拼接IP 字段a1、a2会从整数表示转换为可读的 IPv4 地址未找到的字段名会报Field xxx not found.并退出exit code 1。字段映射机制Moloch 字段 → Elasticsearch 字段-f中的字段名是 Arkime 的「逻辑字段」如host.http而 Elasticsearch 索引里实际存储的是dbField2底层字段名。moloch_query的get_field_map()会直连 ES 查询fields索引es.search(indexfields, ...)建立「字段名 → dbField2」的映射跳过regex类型的字段然后才能把查询翻译成正确的底层字段。在 viewer 侧这一映射同样存在于 viewer/config.jssource.dbField2参与构建internals.dbFieldsMap是 Arkime 字段体系在前后端一致工作的基础。全包搜索/输出在原始 PCAP 上做正则第二阶段的核心是把会话 PCAP 拉下来。两种用法输出原始包把packet加入-f字段列表每个会话的 PCAP 会以hex 编码hexified的形式追加到输出行的packet列。从源码看工具通过binascii.hexlify(res.content)将下载的二进制 PCAP 转为十六进制字符串后再写入 TSV。包内正则搜索--regex作用于原始二进制包re.search(args.regex.encode(utf-8), res.content)--hexregex作用于hex 化后的包re.search(args.hexregex.encode(utf-8), phex)。两者只能二选一同时指定会报错并以 exit code 2 退出命中正则的会话保留未命中的被丢弃。PCAP 的获取走 viewer 的/sessions.pcap接口脚本以{ids: x[_id]}为参数请求{molurl}/sessions.pcap这与 Arkime 对外文档化的GET /api/sessions/pcap一致——viewer/apiSessions.js 中getPCAP即实现该接口支持通过expression等会话查询参数直接按条件导出 pcap。viewer 路由声明见 viewer/viewer.js/api/sessions[/.]pcap。并发控制由-c决定packet_search使用ThreadPoolExecutor(max_workersargs.concurrent)asyncio.gather并发下载/搜索 PCAP默认 10 并发通过worker_init为每个工作线程准备独立的requests.Session。完整选项参考选项说明-s DATE/TIME搜索开始时间必填-e DATE/TIME搜索结束时间必填-q QUERY过滤会话的查询表达式语法与 Arkime UI 相同缺省时报错除非显式使用--wreck-the-cluster-f FIELDS逗号分隔的输出字段列表-l列出-f允许使用的全部字段后退出-c NUMBER并发 PCAP 下载/搜索的线程数默认 10仅全包模式生效-p NUMBER每次从 Elasticsearch 取回的结果条数默认 1000同时也是进度上报与结果刷新的频率--headers输出首行增加表头--regex对每个会话的原始 pcap 执行的正则--hexregex对每个会话 hex 化后的 pcap 执行的正则--limit NUMBER限制返回结果数向上取整到页大小--apiuser USERArkime viewer 的 API 用户名必填--apipass PASSAPI 密码必填可省略以便交互式输入但脚本有明确警示通过命令行传参会暴露在ps进程列表中属于不安全用法--molurl URLArkime viewer 节点地址proto://host:port必填--esurl ESElasticsearch 地址proto://host:port必填-t --timeoutElasticsearch scroll 超时默认2m--wreck-the-cluster危险开关跳过「必须提供-q查询」的保护意味着对全库全量扫描脚本注释直言「Dont do this unless necessary」注意文档选项清单中未单独列出的-t/--timeout与--wreck-the-cluster同样存在于脚本参数定义中contrib/moloch_query前者控制 scroll 上下文存活时间后者是防呆开关。底层调用链与工作原理把文档与源码对照整个查询流程可以还原为如下调用链参数校验main强制要求-s、-e与-q除非--wreck-the-cluster--regex与--hexregex互斥。构建查询将startTime、stopTime、expression、fields、facets0、lengthpagesize、strictly0组装成参数调用 viewer 的/api/buildqueryget_query。该接口在 viewer/viewer.js 中映射到查询构建模块具体逻辑由 viewer/buildQuery.js 实现——它负责把 Arkime 表达式解析为可执行的 Elasticsearch 查询含排序、过滤、字段解析等。若返回bsqErr则打印错误并以 exit code 1 退出。字段映射get_field_map()查询 ESfields索引获得字段映射把 Moloch 字段翻译成dbField2底层字段。元数据分页process_sessions用es.search带scrollargs.timeout、sizeargs.pagesize发起首次查询随后循环es.scroll(scroll_idsid, scroll5m)翻页直到取完hits.total或达到--limit。每页处理后立即print_tsv输出并打印进度。全包阶段如启用每页的命中会话经packet_search并发调用/sessions.pcap下载原始包、hex 化、正则过滤命中的会话写回结果。输出TSV 写 stdout进度与诊断写 stderr结束时打印Finished. Query took ...。这套设计的关键教训与文档强调一致scroll 分页按页输出保证了大结果集下的内存可控而第二阶段PCAP 下载的开销与第一阶段命中数成正比因此务必用精确的元数据过滤器时间窗口 表达式把候选集压到最小。使用注意事项认证脚本基于HTTPDigestAuth访问 viewer API因此需要 viewer 已配置对应的 API 用户与密码--apiuser/--apipass。密码安全--apipass会出现在ps输出中建议省略该参数让脚本通过getpass交互式提示输入避免凭据泄露。ES 地址--esurl必须是 viewer 可直接访问的 Elasticsearch 地址脚本开启了sniff_on_start与sniff_on_connection_fail会感知集群节点变化。版本适配脚本使用旧式doc_typesession与 scroll API适用于以 Elasticsearch 为后端、且保留 session 类型索引的 Arkime 部署形态配置了多 ES 集群multies的环境请先在对应 viewer 上验证字段与索引可用性。风险开关不要轻易使用--wreck-the-cluster——它会绕过查询保护触发对全库的全量扫描与潜在的巨量 PCAP 下载。小结moloch_query是把「Arkime 查询语法 Elasticsearch 元数据 会话级 PCAP」三者串起来的命令行瑞士军刀元数据阶段决定效率全包阶段决定深度。配合-f、--regex/--hexregex、-c/-p/--limit等参数它可以胜任批量会话导出、跨时间窗口计数、原始包特征扫描等分析任务。其实现与 Arkime 的buildquery接口、sessions.pcap接口及fields索引体系深度绑定理解这套调用链也就能理解如何在脚本化场景中继续复用 Arkime 的查询能力。赞分享网络安全网络后端数据可视化【免费下载链接】arkimeArkime is an open source, large scale, full packet capturing, indexing, and database system.项目地址https://gitcode.com/gh_mirrors/ar/arkime点击查看免费下载相关推荐Local Deep Research 接入 Elasticsearch私有文档库全文检索与两阶段深度搜索实战指南Local Deep Research 接入 Elasticsearch私有文档库全文检索与两阶段深度搜索实战指南 本文围绕 Local Deep ReseaAI应用人工智能大模型RAGAI Agent深度研究本地部署后端前端highlight.io 会话搜索实战指南基于 Track、Identify、点击与访问 URL 的 Session 查询highlight.io 会话搜索实战指南基于 Track、Identify、点击与访问 URL 的 Session 查询 highlight.io 的会话可观测性后端shibing624/text2vec-base-chinese模型的常见错误及解决方法shibing624/text2vec base chinese模型的常见错误及解决方法 引言 在自然语言处理领域预训练模型极大地推动了句子嵌入和文本匹配任务教程上一篇Turso生产环境部署终极指南从开发到上线的完整操作手册下一篇遥感图像配准技术综述从特征提取到多模态融合创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑