galah
Galah 是一款由大语言模型(LLM)驱动的智能网络蜜罐,旨在模拟各类 Web 应用并动态响应任意 HTTP 请求。与传统蜜罐依赖人工预定义规则或固定漏洞场景不同,Galah 利用 LLM 的生成能力,实时构造包含特定头部和正文内容的逼真响应,从而更灵活地诱捕和记录攻击者的探测行为。
这一设计有效解决了传统蜜罐覆盖场景有限、易被识别以及维护成本高的问题。通过引入缓存机制,Galah 能对相同请求复用响应,在保持交互真实性的同时显著降低 API 调用成本;此外,它还支持集成 Suricata 规则,对传入请求进行深度特征匹配,进一步提升了检测的精准度。
Galah 特别适合网络安全研究人员、红蓝对抗演练人员以及希望探索 LLM 在安全领域应用的开发者使用。其独特的技术亮点在于将大模型的语义理解与生成能力应用于网络协议交互,能够根据攻击者的输入“即兴表演”出合理的服务器反馈,极大增加了攻击者分析蜜罐的难度。需要注意的是,由于响应生成依赖外部模型,部署时建议配置好 API 用量限制以防资源耗尽。作为一个开源项目,Galah 为研究新型交互式防御策略提供了有趣的实验平台。
使用场景
某安全团队在云环境中部署蜜罐以诱捕针对 Web 应用的自动化扫描与攻击,但传统静态蜜罐难以应对多变的探测手法。
没有 galah 时
- 维护成本高昂:为了模拟多种应用(如 WordPress、Jenkins),需手动编写大量固定的 HTML 响应和漏洞页面,更新滞后。
- 易被识别绕过:攻击者通过指纹识别发现响应内容千篇一律或逻辑僵硬,轻易判断出是蜜罐并停止攻击,导致数据收集失败。
- 覆盖场景有限:只能预设几种常见漏洞路径,对于攻击者尝试的冷门 URI 或畸形 HTTP 请求,往往直接返回 404 或连接重置,错失记录新型攻击载荷的机会。
- 缺乏动态交互:无法根据攻击者的具体输入(如特定的 SQL 注入语句)生成看似合理的“报错”或“成功”反馈,难以深入诱导攻击者暴露更多意图。
使用 galah 后
- 动态生成响应:galah 利用大模型实时理解任意 HTTP 请求,自动生成符合上下文的头部、状态码及身体内容,无需人工预定义成千上万个页面。
- 逼真迷惑性强:面对不同探测流量,galah 能模仿真实业务的语气和逻辑返回差异化结果,显著增加攻击者识别蜜罐的难度,延长其停留时间。
- 全量威胁捕获:无论攻击者探测何种奇怪路径或提交何种 Payload,galah 都能给出“像样”的回应并完整记录交互过程,极大提升了未知攻击矢量的可见性。
- 智能成本优化:内置缓存机制确保相同请求不再重复调用大模型 API,既保持了响应的动态性,又有效控制了云端 Token 消耗。
galah 通过将大模型的生成能力引入蜜罐,将原本僵硬的“静态陷阱”升级为能主动周旋的“动态诱饵”,大幅提升了威胁情报的获取质量与效率。
运行环境要求
- Linux
- macOS
- Windows
不需要本地 GPU(基于云端 LLM API 或本地 Ollama 服务,若使用本地 Ollama 则取决于所选模型的需求)
未说明(取决于运行的 Go 进程及可选的本地 LLM 模型大小)

快速开始
简而言之:Galah(发音为“guh-laa”)是一款基于大语言模型的网络蜜罐,旨在模拟各种应用程序,并动态响应任意 HTTP 请求。Galah 支持多家主流的大语言模型提供商,包括 OpenAI、Google AI、GCP 的 Vertex AI、Anthropic、Cohere 和 Ollama。
与传统手动模拟特定 Web 应用程序或漏洞的蜜罐不同,Galah 能够根据任何 HTTP 请求动态生成相关响应,包括 HTTP 头部和消息体内容。由大语言模型生成的响应会被缓存一段时间(可配置),以避免对相同请求重复生成,从而降低 API 使用成本。缓存机制是按端口独立的,确保为某一端口生成的响应不会被复用于其他端口上的相同请求。
Galah 还可以选择性地使用 Suricata 规则集来检查传入的 HTTP 请求,匹配的内容涵盖方法、URI、头部、Cookie 以及请求体等多个 HTTP 缓冲区(当前实现尚未支持所有 Suricata 关键字,且 PCRE 处理功能有限)。如需启用并配置规则匹配,请参阅 Suricata HTTP 规则匹配。
在本蜜罐中,提示词配置至关重要。虽然您可以在配置文件中更新提示词,但务必保留引导大语言模型按照指定 JSON 格式生成响应的部分。
注意:Galah 是作为一个有趣的周末项目开发的,旨在探索大语言模型在构造 HTTP 消息方面的潜力。该蜜罐可能通过多种方式被识别,例如网络指纹技术、依赖于大语言模型提供商和模型的较长响应时间,以及非标准响应等。为防止“钱包拒绝服务”攻击,请务必 为您的大语言模型 API 设置使用限制。
快速入门
本地部署
- 确保已安装 Go 1.22 或更高版本。
- 根据您使用的大语言模型提供商,创建 API 密钥(例如,OpenAI 可从 这里 获取,Google AI Studio 可从 这里 获取)或设置身份验证凭据(例如,GCP 的 Vertex AI 需要应用默认凭据)。
- 如果需要提供 HTTPS 端口,请生成 TLS 证书。
- 克隆仓库并安装依赖项。
- 如有需要,更新
config.yaml文件。 - 构建并运行 Go 二进制文件!
git clone git@github.com:0x4D31/galah.git
cd galah
go mod download
mkdir bin
go build -o bin/galah ./cmd/galah
./bin/galah --help
██████ █████ ██ █████ ██ ██
██ ██ ██ ██ ██ ██ ██ ██
██ ███ ███████ ██ ███████ ███████
██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ██ ███████ ██ ██ ██ ██
基于大语言模型的网络蜜罐 | 版本 1.1.1
作者:Adel "0x4D31" Ka
用法:gallah --provider PROVIDER --model MODEL [--server-url SERVER-URL] [--temperature TEMPERATURE] [--api-key API-KEY] [--cloud-location CLOUD-LOCATION] [--cloud-project CLOUD-PROJECT] [--interface INTERFACE] [--config-file CONFIG-FILE] [--rules-config-file RULES-CONFIG-FILE] [--event-log-file EVENT-LOG-FILE] [--cache-db-file CACHE-DB-FILE] [--cache-duration CACHE-DURATION] [--log-level LOG-LEVEL] [--suricata-enabled] [--suricata-rules-dir SURICATA-RULES-DIR]
选项:
--provider PROVIDER, -p PROVIDER
大语言模型提供商(openai、googleai、gcp-vertex、anthropic、cohere、ollama)[环境变量:LLM_PROVIDER]
--model MODEL, -m MODEL
大语言模型型号(例如 gpt-3.5-turbo-1106、gemini-1.5-pro-preview-0409)[环境变量:LLM_MODEL]
--server-url SERVER-URL, -u SERVER-URL
大语言模型服务器 URL(Ollama 需要)[环境变量:LLM_SERVER_URL]
--temperature TEMPERATURE, -t TEMPERATURE
大语言模型采样温度(0-2)。值越高,输出越随机 [默认:1,环境变量:LLM_TEMPERATURE]
--api-key API-KEY, -k API-KEY
大语言模型 API 密钥 [环境变量:LLM_API_KEY]
--cloud-location CLOUD-LOCATION
大语言模型云位置区域(GCP 的 Vertex AI 需要)[环境变量:LLM_CLOUD_LOCATION]
--cloud-project CLOUD-PROJECT
大语言模型云项目 ID(GCP 的 Vertex AI 需要)[环境变量:LLM_CLOUD_PROJECT]
--interface INTERFACE, -i INTERFACE
服务的接口
--config-file CONFIG-FILE, -c CONFIG-FILE
配置文件路径 [默认:config/config.yaml]
--rules-config-file RULES-CONFIG-FILE, -r RULES-CONFIG-FILE
规则配置文件路径(若省略,则规则引擎将被禁用)
--event-log-file EVENT-LOG-FILE, -o EVENT-LOG-FILE
事件日志文件路径 [默认:event_log.json]
--cache-db-file CACHE-DB-FILE, -f CACHE-DB-FILE
用于响应缓存的数据库文件路径 [默认:cache.db]
--cache-duration CACHE-DURATION, -d CACHE-DURATION
已生成响应的缓存时长(单位:小时)。设置为 0 表示禁用缓存,设置为 -1 表示无限期缓存(无过期)。[默认:24]
--log-level LOG-LEVEL, -l LOG-LEVEL
日志级别(debug、info、error、fatal)[默认:info]
--suricata-enabled 启用 Suricata HTTP 规则检查(默认:false)
--suricata-rules-dir SURICATA-RULES-DIR
包含 Suricata .rules 文件的目录,用于检查 HTTP 请求
--help, -h 显示此帮助信息并退出
在 Docker 中运行
- 确保本地已安装 Docker CE 或 EE。
- 克隆仓库并构建 Docker 镜像。
- 您可以将本地目录挂载到容器中,用于存储日志。
- 运行 Docker 容器。
% git clone git@github.com:0x4D31/galah.git
% cd galah
% mkdir logs
% export LLM_API_KEY=your-api-key
% docker build -t galah-image .
% docker run -d --name galah-container -p 8080:8080 -v $(pwd)/logs:/galah/logs -e LLM_API_KEY galah-image -o logs/galah.json -p openai -m gpt-3.5-turbo-1106
示例用法
./galah -p openai -m gpt-4.1-mini --suricata-enabled --suricata-rules-dir rules
测试:
curl --http1.1 --path-as-is -X POST \
-H 'SOAPAction: "http://purenetworks.com/HNAP1/GetGuestNetworkSettings"' \
-H 'Content-Type: text/xml' \
--data '<GetGuestNetworkSettings xmlns="http://purenetworks.com/HNAP1/">'
http://127.0.0.1:8888/HNAP1/ -v
注意:无需使用 -X 或 --request,POST 已被推断。
* 正在尝试连接到 127.0.0.1:8888...
* 已连接到 127.0.0.1 (127.0.0.1),端口 8888
> POST /HNAP1/ HTTP/1.1
> 主机:127.0.0.1:8888
> 用户代理:curl/8.7.1
> 接受:*/*
> SOAPAction:“http://purenetworks.com/HNAP1/GetGuestNetworkSettings”
> 内容类型:text/xml
> 内容长度:64
>
* 完全发送了 64 字节的数据
< HTTP/1.1 200 OK
< 服务器:TP-LINK HTTP Server/1.0
< 日期:2025年4月21日 星期一 01:28:43 GMT
< 内容长度:545
< 内容类型:text/xml; charset=utf-8
<
<?xml version="1.0" encoding="utf-8"?>
<GetGuestNetworkSettingsResponse xmlns="http://purenetworks.com/HNAP1/">
<GetGuestNetworkSettingsResult>OK</GetGuestNetworkSettingsResult>
<GuestNetworkEnabled>true</GuestNetworkEnabled>
<GuestNetworkSSID>TPLink_Guest</GuestNetworkSSID>
<GuestNetworkSecurity>WPA2-PSK</GuestNetworkSecurity>
<GuestNetworkPassword>guest1234</GuestNetworkPassword>
<GuestNetworkIsolation>true</GuestNetworkIsolation>
<GuestNetworkSSIDBroadcast>true</GuestNetworkSSIDBroadcast>
JSON 事件日志:
{
"eventTime": "2025-04-21T02:28:43.583386+01:00",
"httpRequest": {
"body": "<GetGuestNetworkSettings xmlns=\"http://purenetworks.com/HNAP1/\">",
"bodySha256": "836c42168ebbad0b7192daa70ad8e4ea8d5930097162f513045f5ecb6ae9d5bd",
"headers": {
"Accept": "*/*",
"Content-Length": "64",
"Content-Type": "text/xml",
"Soapaction": "\"http://purenetworks.com/HNAP1/GetGuestNetworkSettings\"",
"User-Agent": "curl/8.7.1"
},
"headersSorted": "Accept,Content-Length,Content-Type,Soapaction,User-Agent",
"headersSortedSha256": "3a44fecf9284eca3947c45ffeb2301ce6d9b3d0a3cc5a7491ccea2b6ed61edaa",
"method": "POST",
"protocolVersion": "HTTP/1.1",
"request": "/HNAP1/",
"sessionID": "1745198923587092000_qHLNEPBNPrH6qw==",
"userAgent": "curl/8.7.1"
},
"httpResponse": {
"headers": {
"Content-Length": "454",
"Content-Type": "text/xml; charset=utf-8",
"Server": "TP-LINK HTTP Server/1.0"
},
"body": "<?xml version=\"1.0\" encoding=\"utf-8\"?> <GetGuestNetworkSettingsResponse xmlns=\"http://purenetworks.com/HNAP1/\"> <GetGuestNetworkSettingsResult>OK</GetGuestNetworkSettingsResult> <GuestNetworkEnabled>true</GuestNetworkEnabled> <GuestNetworkSSID>TPLink_Guest</GuestNetworkSSID> <GuestNetworkSecurity>WPA2-PSK</GuestNetworkSecurity> <GuestNetworkPassword>guest1234</GuestNetworkPassword> <GuestNetworkIsolation>true</GuestNetworkIsolation> <GuestNetworkSSIDBroadcast>true</GuestNetworkSSIDBroadcast> </GetGuestNetworkSettingsResponse>"
},
"level": "info",
"msg": "successfulResponse",
"port": "8888",
"responseMetadata": {
"generationSource": "llm",
"info": {
"model": "gpt-4.1-mini",
"provider": "openai",
"temperature": 1
}
},
"sensorName": "mbp",
"srcHost": "localhost",
"srcIP": "127.0.0.1",
"srcPort": "62418",
"suricataMatches": [
{
"msg": "ET WEB_SPECIFIC_APPS D-Link DIR-823G Multiple HNAP SOAPAction Endpoints Authentication Bypass",
"sid": "2061623"
}
],
"tags": null,
"time": "2025-04-21T02:28:43.587152+01:00"
}
更多示例请参阅 这里。
库的使用
galah 包可以作为一个独立的库使用。创建一个 galah.Service 并调用 GenerateHTTPResponse 方法,传入一个 http.Request 对象即可生成响应。如果省略 ConfigFile、EventLogFile 或 CacheDBFile,将使用它们的默认路径(config/config.yaml、event_log.json 和 cache.db)。指定 RulesConfigFile 可启用规则检查;若留空,则完全禁用规则引擎。Options.Logger 可以提供一个 *log.Logger;如果为 nil,Galah 将创建一个默认的文本日志记录器。
svc, err := galah.NewService(context.Background(), galah.Options{
LLMProvider: "openai",
LLMModel: "gpt-4.1-mini",
LLMAPIKey: "YOUR_KEY",
ConfigFile: "config/config.yaml",
RulesConfigFile: "config/rules.yaml", // 留空以禁用规则引擎
EventLogFile: "event_log.json",
CacheDBFile: "cache.db",
Logger: log.NewWithOptions(os.Stderr, log.Options{}),
})
if err != nil {
log.Fatal(err)
}
req, _ := http.NewRequest("GET", "https://example.com", nil)
respBytes, err := svc.GenerateHTTPResponse(req, "8080")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(respBytes))
你也可以从已加载的配置构建服务:
cfg, _ := config.LoadConfig("config.yaml")
rulesCfg, _ := config.LoadRules("rules.yaml")
svc, err := galah.NewServiceFromConfig(context.Background(), cfg, rulesCfg.Rules, galah.Options{
LLMProvider: "openai",
LLMModel: "gpt-4.1-mini",
LLMAPIKey: "YOUR_KEY",
EventLogFile: "event_log.json", // 留空则使用默认值
CacheDBFile: "cache.db", // 留空则使用默认值
Logger: log.NewWithOptions(os.Stderr, log.Options{}),
})
要完全关闭规则检查,在创建服务时省略 RulesConfigFile,或在调用 NewServiceFromConfig 时传入 nil/空切片。任何未使用的选项字段都可以留空,以使用其默认值。
该服务还提供了作为库使用时用于缓存和事件日志记录的辅助方法:
respBytes, _ := svc.CheckCache(req, "8080") // 如果没有缓存条目,则返回 nil
svc.LogEvent(req, llm.JSONResponse{Headers: map[string]string{"Content-Type": "text/plain"}, Body: "hi"}, "8080", "llm", nil)
版本历史
v1.1.12025/07/24v1.1.02025/07/23v1.0.02024/05/26常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。