Skip to content

指纹数据库

内置 700+ 已知服务指纹,通过一个图标哈希即可识别背后运行的服务。

700+ 指纹 MMH3 int32 Lite/Full 双模式

概览

指纹库是 IconHash 的核心资产之一。它将"图标哈希 → 服务身份"的映射预先建好,让你无需访问目标即可知道对方在用什么。

核心价值

一个 int32 哈希值就能反查服务身份——不依赖 HTML 文本、不依赖端口特征,绕过大量传统指纹识别的盲区。对攻防双方都是低成本、高信噪比的资产识别手段。

数据结构

每个指纹条目的结构:

示例(简化):

完整 JSON Schema 字段说明
字段类型必填说明
hashint32MMH3 计算的图标哈希值(可负)
servicestring服务名,如 nginxJenkins
categorystring主分类,见下方分类清单
tagsstring[]多维度标签数组,便于检索
descriptionstring人类可读的指纹描述
json
{
  "hash": -1161367058,
  "service": "nginx",
  "category": "web-server",
  "tags": ["web", "proxy"],
  "description": "Nginx default favicon"
}

指纹分类分布

700+ 指纹覆盖的主要类别(示意):

web-server app-framework ops security iot cms db-admin
完整分类清单(点击展开)
分类 (category)典型服务用途
web-servernginx、apache、IIS、CaddyWeb 服务器识别
app-frameworkSpring、Django、Rails、ThinkPHP开发框架特征
opsJenkins、Grafana、Kubernetes、Prometheus运维 / DevOps 面板
securityWAF、防火墙、VPN、堡垒机安全设备定位
iot路由器、摄像头、NAS、打印机物联网资产
cmsWordPress、Drupal、Discuz内容管理系统
db-adminphpMyAdmin、Adminer、Mongo Express数据库管理面板

加载机制

两种构建模式

  • Lite 模式:二进制体积小,指纹库在首次查询时从 GitHub 拉取并缓存到本地,适合 CLI 临时调用。
  • Full 模式:指纹库通过 embed.FS 编译进二进制,离线可用,适合内网/隔离环境部署。

查询流程

内存索引为 map[int32]Fingerprint,O(1) 查询。

为什么是 O(1)?

指纹哈希本身就是 int32,直接作为 map 的 key 使用,无需遍历、无需排序、无需字符串比较。即使 700+ 扩展到 7000+,单次查询仍是常数时间——这是哈希指纹库相比正则匹配类指纹的核心性能优势。

自定义与合并

支持将自定义指纹合并进库,适合企业内部资产识别:

自定义文件格式:

自定义指纹文件示例
json
[
  {
    "hash": -1234567890,
    "service": "internal-portal",
    "category": "custom",
    "tags": ["internal"],
    "description": "公司内部门户"
  }
]

覆盖规则

当自定义指纹与内置指纹的 hash 相同 时,自定义条目会覆盖内置条目。这意味着你可以用自定义指纹修正内置库的误报,但也要小心覆盖后丢失原始内置信息(建议在 tags 中保留 builtin-override 标记以便追溯)。

CLI 操作

bash
# 列出全部
iconhash fingerprints list

# 搜索 nginx 相关
iconhash fingerprints search nginx

# 更新(Lite 从远程拉取最新)
iconhash fingerprints update
子命令速查
子命令作用示例
list列出全部 700+ 指纹iconhash fingerprints list
search <kw>按关键字搜索服务名/标签iconhash fingerprints search nginx
update更新指纹库(Lite 拉远程,Full 提示重新编译)iconhash fingerprints update

API 操作

bash
# 浏览
curl "http://localhost:8000/fingerprints"

# 搜索
curl "http://localhost:8000/fingerprints?q=nginx"

# 查询单个哈希
curl "http://localhost:8000/lookup?hash=-1161367058"

API 端点说明

  • GET /fingerprints:返回指纹列表,支持 ?q= 关键字过滤、分页参数。
  • GET /lookup?hash=<int32>:精确查询单个哈希,命中返回完整指纹条目,未命中返回 found: false
  • 所有响应均为 JSON 格式,可直接被脚本消费。

实战场景

下面用一张端到端流程图把"图标 → 哈希 → 指纹 → 资产/风险"的完整匹配链路串起来:

场景一:识别未知资产

场景二:批量资产归类

场景三:搜索引擎联动

维护与贡献

指纹库持续更新,欢迎社区贡献新指纹:

如何贡献一条新指纹

  1. iconhash url <target>iconhash file favicon.ico 算出 MMH3 int32 哈希。
  2. 确认该哈希未出现在内置库(iconhash fingerprints list | grep <hash>)。
  3. 数据结构 字段写一条 JSON,service / category / tags 尽量复用已有命名。
  4. 提交 PR 到 data/fingerprints.json,附上图标来源 URL 便于审核。

贡献前必读

  • 禁止贡献未公开披露的私有资产指纹(涉及授权或保密协议的内部系统)。
  • 图标来源必须可公开访问(如厂商官网默认 favicon),并在 PR 描述中附上原始 URL。
  • 同一图标在不同部署下可能产生不同哈希(base64 编码差异),请以原始二进制为准。

提交格式见 GitHub 仓库data/fingerprints.json


下一篇:Go SDK

基于 MIT 许可证发布