Arkime:大规模开源网络分析与数据包捕获系统
Arkime:大规模开源网络分析与数据包捕获系统
项目描述
Arkime(前身为Moloch)是一个大规模、开源的网络数据包捕获和分析系统,专为处理现代网络环境中的高速流量而设计。该系统能够存储和索引标准PCAP格式的网络流量数据,提供快速的索引访问和直观的Web界面用于数据包浏览、搜索和导出。Arkime支持水平扩展,可以部署在多个系统上处理数十Gbps的流量。
Arkime保留了所有原始数据包,允许安全分析师使用Wireshark等标准工具进行深度分析,同时提供了强大的API接口用于程序化访问会话数据和PCAP文件。
功能特性
- 大规模数据包捕获: 支持多线程处理和高吞吐量数据包捕获,可扩展至数十Gbps流量
- 完整PCAP保留: 所有数据包以标准PCAP格式存储,兼容现有分析工具
- 高效索引检索: 基于Elasticsearch/OpenSearch的元数据索引,实现快速搜索和查询
- 丰富协议解析: 内置支持100+种网络协议解析,包括HTTP、DNS、TLS、SSH等
- 实时流量监控: 提供实时网络流量可视化和会话分析功能
- 灵活部署选项: 支持单机部署和分布式集群部署模式
- 安全取证能力: 完整的会话重建和数据包导出功能,支持网络安全调查
安装指南
系统要求
- Linux操作系统(推荐CentOS 7+或Ubuntu 18.04+)
- Node.js 18或20版本
- OpenSearch或Elasticsearch
- 至少2-3GB内存(开发环境)
快速安装
# 使用easybutton-build.sh快速构建
./easybutton-build.sh
# 安装依赖项
make check
# 启动查看器
npm run viewer:test
详细安装步骤
- 安装OpenSearch/Elasticsearch
- 安装Node.js运行环境
- 运行构建脚本编译Arkime组件
- 配置网络接口和数据存储路径
- 启动捕获进程和Web界面
使用说明
基本使用
访问Web界面:http://localhost:8123
数据加载示例
# 加载测试数据
./easybutton-build.sh
# 运行测试用例
make check
# 启动开发模式查看器
npm run viewer:dev
API访问
Arkime提供完整的REST API接口用于程序化访问:
# 获取会话数据
curl http://localhost:8123/sessions.json
# 下载PCAP文件
curl http://localhost:8123/api/session/[sessionId]/pcap
核心代码
数据包处理核心
/******************************************************************************/
/* packet.c -- Functions for acquiring data */
#include "arkime.h"
SUPPRESS_ALIGNMENT
LOCAL ArkimePacketRC arkime_packet_process(ArkimePacketBatch_t *batch,
ArkimePacket_t *const packet,
const uint8_t *data,
int len)
{
// 数据包基础验证和处理
if (len < 20)
return ARKIME_PACKET_CORRUPT;
// 运行以太网回调处理
return arkime_packet_run_ethernet_cb(batch, packet, data + 18,
len - 18,
ARKIME_ETHERTYPE_ETHER,
"garland");
}
会话管理核心
/******************************************************************************/
/* session.c -- Session functions */
LOCAL void arkime_session_init(ArkimeSession_t *session,
const uint8_t *sessionId)
{
// 初始化会话结构
memset(session, 0, sizeof(ArkimeSession_t));
memcpy(session->sessionId, sessionId, ARKIME_SESSIONID_LEN);
// 初始化协议状态
session->stopSaving = 0;
session->midSave = 0;
// 初始化数据统计
session->databytes[0] = 0;
session->databytes[1] = 0;
}
HTTP解析器实现
/******************************************************************************/
/* http.c -- HTTP protocol parsing */
LOCAL int http_parser_callback(http_parser *parser,
const char *at,
size_t length)
{
ArkimeSession_t *session = parser->data;
// HTTP头部解析和处理
switch (parser->type) {
case HTTP_REQUEST:
arkime_field_string_add(hostField, session, at, length, TRUE);
break;
case HTTP_RESPONSE:
arkime_field_int_add(statuscodeField, session, parser->status_code);
break;
}
return 0;
}
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码


浙公网安备 33010602011771号