Ringmast4r/Huginn-Muninn

GitHub: Ringmast4r/Huginn-Muninn

Huginn-Muninn是一款基于互联网众包的OSINT设备识别工具。

Stars: 20 | Forks: 6

[![Typing SVG](https://readme-typing-svg.herokuapp.com?font=Fira+Code&weight=600&size=22&pause=1000&color=FFFFFF¢er=true&vCenter=true&multiline=true&repeat=true&width=950&height=80&lines=Thought+%26+Memory+%E2%80%94+Odin's+two+ravens.;MAC+%2B+DHCP+%2B+DHCPv6+%2B+protocol+behavior.;11%2C300%2C000%2B+device-intelligence+records)](https://git.io/typing-svg)
[![Records](https://img.shields.io/badge/Records-11.3M-FFFFFF?style=for-the-badge&logo=database&logoColor=000000)](#-stats---live) [![Datasets](https://img.shields.io/badge/Datasets-8-E5E7EB?style=for-the-badge&logo=files&logoColor=000000)](#-ls-folders) [![Formats](https://img.shields.io/badge/Formats-4-D1D5DB?style=for-the-badge&logo=fileformat&logoColor=000000)](#-formats) [![Updates](https://img.shields.io/badge/Updates-Monthly_Auto-9CA3AF?style=for-the-badge&logo=githubactions&logoColor=000000)](#-update_schedule) [![License](https://img.shields.io/badge/License-MIT-FFFFFF?style=for-the-badge&logo=opensourceinitiative&logoColor=000000)](#-license) [![Stars](https://img.shields.io/github/stars/Ringmast4r/Huginn-Muninn?style=flat-square&color=FFFFFF&label=%E2%98%85%20Stars&labelColor=000000)](https://github.com/Ringmast4r/Huginn-Muninn/stargazers) [![Forks](https://img.shields.io/github/forks/Ringmast4r/Huginn-Muninn?style=flat-square&color=E5E7EB&label=%E2%9A%A1%20Forks&labelColor=000000)](https://github.com/Ringmast4r/Huginn-Muninn/network/members) [![Repo Size](https://img.shields.io/github/repo-size/Ringmast4r/Huginn-Muninn?style=flat-square&color=D1D5DB&labelColor=000000)](#) [![Last Commit](https://img.shields.io/github/last-commit/Ringmast4r/Huginn-Muninn?style=flat-square&color=9CA3AF&labelColor=000000)](https://github.com/Ringmast4r/Huginn-Muninn/commits/main) [![Visitors](https://visitor-badge.laobi.icu/badge?page_id=Ringmast4r.Huginn-Muninn)](#) Huginn & Muninn ## `> 这是什么` ``` 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 行为识别设备 |
## `> 识别链` ``` ┌─────────────────────────────────────────────────────────────┐ │ NETWORK TRAFFIC OBSERVED │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ MAC: 00:1A:2B:XX:XX:XX │ │ → MAC_Vendors/ → "Apple, Inc." │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ DHCP Option 55: 1,3,6,15,28,51,58,59 │ │ → DHCP_Signatures/ → fingerprint ID #450 │ │ → Combinations/ → "Amazon Fire OS" (eBook Reader) │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ TCP SYN: Window=65535, TTL=64, Options=MSS,NOP,WS,NOP,NOP │ │ → tcp.json → "iOS 14.x" │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ RESULT: Apple device running iOS 14 + Amazon Fire OS app │ └─────────────────────────────────────────────────────────────┘ ``` ## `> 查看文件夹/`
| 文件夹 | 包含内容 | 记录数 | 格式 | |:-------|:--------------|:-------:|:-------:| | `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 |
## `> 格式` 每个文件夹都以多种格式提供相同的数据。请选择适合你技术栈的格式。
| 格式 | 最适用场景 | 备注 | |:------:|:---------|:------| | ![CSV](https://img.shields.io/badge/CSV-Universal-FFFFFF?style=flat-square&labelColor=000000) | Excel, pandas, 快速解析 | 纯文本,通用 | | ![JSON](https://img.shields.io/badge/JSON-API_Friendly-E5E7EB?style=flat-square&labelColor=000000) | Web 应用, JavaScript, REST | 易于加载 | | ![Parquet](https://img.shields.io/badge/Parquet-Analytics-D1D5DB?style=flat-square&labelColor=000000) | Spark, Polars, DuckDB | 列式存储,压缩格式 | | ![SQLite](https://img.shields.io/badge/SQLite-Indexed-9CA3AF?style=flat-square&labelColor=000000&logo=sqlite&logoColor=000000) | 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` 自动更新。 数据是 *累加式* 的 —— 设备不会消失,指纹也不会很快过期,因此 每月刷新是正确的节奏。 ## `> 相关项目` [![OUI Master DB](https://img.shields.io/badge/OUI_Master_Database-88K_Vendors-FFFFFF?style=for-the-badge&logo=ethernet&logoColor=000000)](https://github.com/Ringmast4r/OUI-Master-Database) [![WiFi Mothership](https://img.shields.io/badge/WiFi_Mothership-Wardriving_Network-E5E7EB?style=for-the-badge&logo=wifi&logoColor=000000)](https://wifimothership.com/) [![FLOCK](https://img.shields.io/badge/FLOCK-336K_Cameras-D1D5DB?style=for-the-badge&logo=cctv&logoColor=000000)](https://github.com/Ringmast4r/FLOCK) [![Tower-Hunter](https://img.shields.io/badge/Tower--Hunter-Cell_Tower_Logger-9CA3AF?style=for-the-badge&logo=signal&logoColor=000000)](https://github.com/Ringmast4r/Tower-Hunter) ## `> 许可证` 基于 **MIT** 协议发布 —— 可商业使用、修改、重新分发、嵌入专有工具中。 *思想是有价值的。记忆是不可替代的。* **最后更新:** `2026-05-12` · **总记录数:** `~11.3M` · **维护者** [@Ringmast4r](https://github.com/Ringmast4r)
标签:C2日志可视化, DHCP, ESC4, MAC地址, OSINT, 众包数据, 开源情报, 指纹识别, 设备识别