Ringmast4r/Huginn-Muninn
GitHub: Ringmast4r/Huginn-Muninn
Huginn-Muninn是一款基于互联网众包的OSINT设备识别工具。
Stars: 20 | Forks: 6
[](#-stats---live) [](#-ls-folders) [](#-formats) [](#-update_schedule) [](#-license) [](https://github.com/Ringmast4r/Huginn-Muninn/stargazers) [](https://github.com/Ringmast4r/Huginn-Muninn/network/members) [](#) [](https://github.com/Ringmast4r/Huginn-Muninn/commits/main) [](#)
## `> 这是什么`
```
ringmast4r@github:~$ cat huginn-muninn.txt
PURPOSE: Device fingerprint intelligence — every layer of identification
SCOPE: MAC vendor + DHCP + DHCPv6 + protocol behavior signatures
COVERAGE: 11.3M records across 8 cross-referenced datasets
FORMATS: CSV, JSON, Parquet, SQLite (chunked under 100MB)
UPDATES: First of every month via auto-pipeline
USE CASES: Wardriving | Network forensics | IoT discovery | Threat intel
STATUS: [ LIVE & AUTO-UPDATING ]
```
大多数指纹数据库只选取 *单一* 的识别层。Huginn & Muninn 将
它们全部合并为一个单一的交叉引用知识库。
## `> 统计 --实时`
| 指标 | 数量 | 备注 |
|:------:|:-----:|:-----:|
| **MAC 厂商** | `10,233,053` | OUI + MA-M + MA-S 块 |
| **DHCP 指纹** | `448,002` | Option 55 参数请求模式 |
| **DHCP 厂商** | `444,126` | Option 60 厂商类字符串 |
| **设备配置文件** | `119,028` | 制造商 + 型号 + OS + 类别 |
| **DHCPv6 Enterprise** | `58,405` | IANA Enterprise 标识符 |
| **DHCPv6 指纹** | `1,654` | IPv6 Option-list 模式 |
| **组合** | `813` | 指纹 → 设备映射(桥梁) |
| **Web User-Agent** | `899` | User-Agent → 浏览器/设备 |
| **总记录数** | `~11.3M` | 跨 8 个数据集交叉引用 |
## `> 缺失的环节` — 组合
大多数指纹数据库只提供原始模式,却不告诉你 *它们属于什么设备*。
`Combinations/` 文件夹通过将协议指纹与实际设备关联起来,弥补了这一差距。
```
DHCP Pattern "1,3,6,15,28,51,58,59"
↓
Fingerprint ID #450
↓
Device ID #9417 → "Amazon Fire OS" (eBook Reader)
```
| 统计 | 数量 |
|:-----|:-----:|
| 总映射数 | `813` |
| 关联到设备 ID | `727` |
| 仅协议(新设备) | `86` |
## `> 协议指纹`
`Satori_Fingerprints/` 文件夹通过设备在协议层级的 **行为方式** 来识别设备,
而不仅仅是依赖其自我报告。设备不需要告诉你它运行的是 Linux ——
它的 TCP stack 会暴露这一点。
```
%%{init: {'theme':'dark', 'themeVariables': {'pie1':'#FFFFFF','pie2':'#E5E7EB','pie3':'#D1D5DB','pie4':'#9CA3AF','pie5':'#6B7280','pie6':'#4B5563','pie7':'#374151','pie8':'#1F2937','pie9':'#FFD700','pie10':'#9FEF00','pie11':'#FF6B6B','pie12':'#8B5CF6','pie13':'#00D4FF','pieTitleTextSize':'16px','pieLegendTextSize':'12px'}}}%%
pie showData
title Protocol Behavior Fingerprints (1,980 total)
"Web User-Agent" : 899
"DHCP behavior" : 481
"TCP stack" : 184
"SMB handshake" : 89
"SSH banner" : 67
"HTTP server" : 67
"SSL/TLS" : 51
"DNS quirks" : 48
"NTP" : 25
"SIP/VoIP" : 25
"Browser JS" : 22
"ICMP" : 13
"DHCPv6" : 9
```
完整协议指纹表(13 种协议)
| 文件 | 数量 | 识别内容 | |:-----|:-----:|:-------------------| | `webuseragent.json` | `899` | 从 HTTP User-Agent 识别浏览器 + 设备 | | `dhcp.json` | `481` | 从 DHCP 行为识别设备名称/类型 | | `tcp.json` | `184` | 从 TCP stack(窗口、TTL、Options)识别 OS | | `smb.json` | `89` | 从 SMB 握手识别 Windows 版本 | | `ssh.json` | `67` | 从 SSH banner 识别服务器软件 | | `web.json` | `67` | 从 HTTP 响应头识别 Web 服务器 | | `ssl.json` | `51` | 从握手识别 TLS 实现 | | `dns.json` | `48` | 从查询特性识别 DNS 服务器 | | `ntp.json` | `25` | 从 NTP 响应识别设备类型 | | `sip.json` | `25` | 从 SIP 头识别 VoIP 设备 | | `browser.json` | `22` | 从 JS 执行行为识别浏览器 | | `icmp.json` | `13` | 从 ICMP echo 特征识别 OS | | `dhcpv6.json` | `9` | 从 DHCPv6 行为识别设备 |
| 文件夹 | 包含内容 | 记录数 | 格式 |
|:-------|:--------------|:-------:|:-------:|
| `MAC_Vendors/` | 硬件制造商身份(扩展 OUI) | 10.3M | csv/json/parquet/sqlite |
| `DHCP_Signatures/` | DHCP Option 55 指纹模式 | 457K | csv/json/parquet/sqlite |
| `DHCP_Vendors/` | DHCP Option 60 厂商类字符串 | 447K | csv/json/parquet/sqlite |
| `Devices/` | 完整的设备配置文件 | 119K | csv/json/parquet/sqlite |
| `DHCPv6_Enterprise/` | IPv6 IANA Enterprise 标识符 | 58K | csv/json/parquet/sqlite |
| `DHCPv6_Signatures/` | IPv6 DHCP 指纹 | 2K | csv/json/parquet/sqlite |
| `Satori_Fingerprints/` | 协议行为签名(13 种协议) | `1,980` | csv/json/sqlite/xml |
| `Combinations/` | 指纹 → 设备映射(桥梁) | `813` | csv/json/sqlite |
## `> 格式`
每个文件夹都以多种格式提供相同的数据。请选择适合你技术栈的格式。
| 格式 | 最适用场景 | 备注 |
|:------:|:---------|:------|
|  | Excel, pandas, 快速解析 | 纯文本,通用 |
|  | Web 应用, JavaScript, REST | 易于加载 |
|  | Spark, Polars, DuckDB | 列式存储,压缩格式 |
|  | SQL 查询, 本地数据库 | 单文件,可查询 |
大型数据集在 GitHub 的 **单文件 100 MB 限制** 下进行了分块(例如 `mac_vendor_part01.csv` … `mac_vendor_part11.csv`)。
## `> 用法`
### `python` — 查询 MAC
```
import sqlite3
conn = sqlite3.connect('MAC_Vendors/sqlite/mac_vendor_part01.db')
row = conn.execute(
"SELECT name FROM mac_vendor WHERE mac = '9CE330'"
).fetchone()
print(row) # → ('Cisco Systems, Inc.',)
```
### `python` — 从 DHCP 指纹查找设备
```
import sqlite3
# 1. 获取 fingerprint ID
sig = sqlite3.connect('DHCP_Signatures/sqlite/dhcp_fingerprint.db')
fp_id = sig.execute(
"SELECT id FROM dhcp_fingerprint WHERE value = '1,3,6,15,28,51,58,59'"
).fetchone()[0]
# 2. 与组合进行交叉引用
comb = sqlite3.connect('Combinations/sqlite/dhcp_combinations.db')
row = comb.execute(
"SELECT satori_name, device_type FROM dhcp_combinations WHERE dhcp_fingerprint_id = ?",
(fp_id,)
).fetchone()
print(row) # → ('Amazon Fire OS', 'eBook Reader')
```
### `python` — 从 TCP 行为获取 OS
```
import json
with open('Satori_Fingerprints/json/tcp.json') as f:
tcp_fps = json.load(f)
linux = [fp for fp in tcp_fps if 'Linux' in fp.get('os_name', '')]
print(f"{len(linux)} Linux TCP fingerprints")
```
### `node.js`
```
const devices = require('./Devices/json/device.json');
const iphones = devices.filter(d => d.name.includes('iPhone'));
console.log(`${iphones.length} iPhone variants`);
```
### `duckdb` — 直接查询 Parquet
```
SELECT name, COUNT(*)
FROM 'MAC_Vendors/parquet/mac_vendor_part*.parquet'
GROUP BY name
ORDER BY 2 DESC
LIMIT 20;
```
## `> 使用场景`
```
%%{init: {'theme':'dark', 'themeVariables': {'pie1':'#FFFFFF','pie2':'#E5E7EB','pie3':'#D1D5DB','pie4':'#9CA3AF','pie5':'#FFD700','pie6':'#9FEF00','pieTitleTextSize':'16px','pieLegendTextSize':'12px'}}}%%
pie showData
title Who Uses This (and How)
"Wardriving / WiFi mapping" : 28
"Network forensics & IR" : 22
"IoT / asset discovery" : 18
"Threat intel pipelines" : 14
"Educational / classroom" : 10
"Spoofing detection" : 8
```
| 使用场景 | 所需数据集 |
|:---------|:------------------|
| **“这个 MAC 是什么设备?”** | `MAC_Vendors/` |
| **“发送此 DHCP 的是什么设备?”** | `DHCP_Signatures/` + `Combinations/` |
| **“从 TCP 行为判断是什么 OS?”** | `Satori_Fingerprints/tcp.json` |
| **“识别 SSH 服务器版本”** | `Satori_Fingerprints/ssh.json` |
| **“从 User-Agent 检测浏览器”** | `Satori_Fingerprints/webuseragent.json` |
| **“根据 ID 获取完整设备配置”** | `Devices/` |
| **“IPv6 设备识别”** | `DHCPv6_Signatures/` + `DHCPv6_Enterprise/` |
## `> 更新计划`
本仓库通过内部 pipeline 在 **每月 1 日** `03:00 UTC` 自动更新。
数据是 *累加式* 的 —— 设备不会消失,指纹也不会很快过期,因此
每月刷新是正确的节奏。
## `> 相关项目`
[](https://github.com/Ringmast4r/OUI-Master-Database)
[](https://wifimothership.com/)
[](https://github.com/Ringmast4r/FLOCK)
[](https://github.com/Ringmast4r/Tower-Hunter)
## `> 许可证`
基于 **MIT** 协议发布 —— 可商业使用、修改、重新分发、嵌入专有工具中。
*思想是有价值的。记忆是不可替代的。*
**最后更新:** `2026-05-12` · **总记录数:** `~11.3M` · **维护者** [@Ringmast4r](https://github.com/Ringmast4r)
标签:C2日志可视化, DHCP, ESC4, MAC地址, OSINT, 众包数据, 开源情报, 指纹识别, 设备识别