fingerprint-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/LICENSE +663 -0
  2. package/README.ar.md +767 -0
  3. package/README.bn.md +767 -0
  4. package/README.bs.md +767 -0
  5. package/README.da.md +767 -0
  6. package/README.de.md +770 -0
  7. package/README.el.md +767 -0
  8. package/README.es.md +769 -0
  9. package/README.fr.md +769 -0
  10. package/README.hi.md +767 -0
  11. package/README.it.md +767 -0
  12. package/README.ja.md +767 -0
  13. package/README.ko.md +772 -0
  14. package/README.md +767 -0
  15. package/README.no.md +767 -0
  16. package/README.pl.md +767 -0
  17. package/README.pt-BR.md +767 -0
  18. package/README.ru.md +767 -0
  19. package/README.th.md +767 -0
  20. package/README.tr.md +767 -0
  21. package/README.uk.md +767 -0
  22. package/README.vi.md +767 -0
  23. package/README.zh-TW.md +768 -0
  24. package/README.zh.md +768 -0
  25. package/dist/app/index.d.ts +3 -0
  26. package/dist/app/index.d.ts.map +1 -0
  27. package/dist/app/index.js +614 -0
  28. package/dist/app/index.js.map +1 -0
  29. package/dist/composite/analyze.d.ts +3 -0
  30. package/dist/composite/analyze.d.ts.map +1 -0
  31. package/dist/composite/analyze.js +59 -0
  32. package/dist/composite/analyze.js.map +1 -0
  33. package/dist/composite/correlate.d.ts +3 -0
  34. package/dist/composite/correlate.d.ts.map +1 -0
  35. package/dist/composite/correlate.js +184 -0
  36. package/dist/composite/correlate.js.map +1 -0
  37. package/dist/composite/enumerate.d.ts +3 -0
  38. package/dist/composite/enumerate.d.ts.map +1 -0
  39. package/dist/composite/enumerate.js +94 -0
  40. package/dist/composite/enumerate.js.map +1 -0
  41. package/dist/composite/helpers.d.ts +22 -0
  42. package/dist/composite/helpers.d.ts.map +1 -0
  43. package/dist/composite/helpers.js +111 -0
  44. package/dist/composite/helpers.js.map +1 -0
  45. package/dist/composite/index.d.ts +3 -0
  46. package/dist/composite/index.d.ts.map +1 -0
  47. package/dist/composite/index.js +29 -0
  48. package/dist/composite/index.js.map +1 -0
  49. package/dist/composite/meta.d.ts +3 -0
  50. package/dist/composite/meta.d.ts.map +1 -0
  51. package/dist/composite/meta.js +23 -0
  52. package/dist/composite/meta.js.map +1 -0
  53. package/dist/composite/osint.d.ts +3 -0
  54. package/dist/composite/osint.d.ts.map +1 -0
  55. package/dist/composite/osint.js +40 -0
  56. package/dist/composite/osint.js.map +1 -0
  57. package/dist/composite/recon.d.ts +3 -0
  58. package/dist/composite/recon.d.ts.map +1 -0
  59. package/dist/composite/recon.js +131 -0
  60. package/dist/composite/recon.js.map +1 -0
  61. package/dist/composite/scan-dns.d.ts +3 -0
  62. package/dist/composite/scan-dns.d.ts.map +1 -0
  63. package/dist/composite/scan-dns.js +44 -0
  64. package/dist/composite/scan-dns.js.map +1 -0
  65. package/dist/composite/scan-http.d.ts +3 -0
  66. package/dist/composite/scan-http.d.ts.map +1 -0
  67. package/dist/composite/scan-http.js +68 -0
  68. package/dist/composite/scan-http.js.map +1 -0
  69. package/dist/composite/scan-paths.d.ts +3 -0
  70. package/dist/composite/scan-paths.d.ts.map +1 -0
  71. package/dist/composite/scan-paths.js +32 -0
  72. package/dist/composite/scan-paths.js.map +1 -0
  73. package/dist/composite/scan-ports.d.ts +3 -0
  74. package/dist/composite/scan-ports.d.ts.map +1 -0
  75. package/dist/composite/scan-ports.js +79 -0
  76. package/dist/composite/scan-ports.js.map +1 -0
  77. package/dist/composite/scan-services.d.ts +3 -0
  78. package/dist/composite/scan-services.d.ts.map +1 -0
  79. package/dist/composite/scan-services.js +111 -0
  80. package/dist/composite/scan-services.js.map +1 -0
  81. package/dist/composite/scan-tls.d.ts +3 -0
  82. package/dist/composite/scan-tls.d.ts.map +1 -0
  83. package/dist/composite/scan-tls.js +32 -0
  84. package/dist/composite/scan-tls.js.map +1 -0
  85. package/dist/composite/scan-waf.d.ts +3 -0
  86. package/dist/composite/scan-waf.d.ts.map +1 -0
  87. package/dist/composite/scan-waf.js +35 -0
  88. package/dist/composite/scan-waf.js.map +1 -0
  89. package/dist/correlation/index.d.ts +3 -0
  90. package/dist/correlation/index.d.ts.map +1 -0
  91. package/dist/correlation/index.js +1044 -0
  92. package/dist/correlation/index.js.map +1 -0
  93. package/dist/data/analytics-patterns.d.ts +21 -0
  94. package/dist/data/analytics-patterns.d.ts.map +1 -0
  95. package/dist/data/analytics-patterns.js +449 -0
  96. package/dist/data/analytics-patterns.js.map +1 -0
  97. package/dist/data/app-signatures.d.ts +52 -0
  98. package/dist/data/app-signatures.d.ts.map +1 -0
  99. package/dist/data/app-signatures.js +1143 -0
  100. package/dist/data/app-signatures.js.map +1 -0
  101. package/dist/data/c2-signatures.d.ts +54 -0
  102. package/dist/data/c2-signatures.d.ts.map +1 -0
  103. package/dist/data/c2-signatures.js +256 -0
  104. package/dist/data/c2-signatures.js.map +1 -0
  105. package/dist/data/cloud-ranges.d.ts +34 -0
  106. package/dist/data/cloud-ranges.d.ts.map +1 -0
  107. package/dist/data/cloud-ranges.js +628 -0
  108. package/dist/data/cloud-ranges.js.map +1 -0
  109. package/dist/data/cookie-patterns.d.ts +28 -0
  110. package/dist/data/cookie-patterns.d.ts.map +1 -0
  111. package/dist/data/cookie-patterns.js +225 -0
  112. package/dist/data/cookie-patterns.js.map +1 -0
  113. package/dist/data/error-signatures.d.ts +19 -0
  114. package/dist/data/error-signatures.d.ts.map +1 -0
  115. package/dist/data/error-signatures.js +321 -0
  116. package/dist/data/error-signatures.js.map +1 -0
  117. package/dist/data/favicon-hashes.d.ts +25 -0
  118. package/dist/data/favicon-hashes.d.ts.map +1 -0
  119. package/dist/data/favicon-hashes.js +249 -0
  120. package/dist/data/favicon-hashes.js.map +1 -0
  121. package/dist/data/h2-signatures.d.ts +50 -0
  122. package/dist/data/h2-signatures.d.ts.map +1 -0
  123. package/dist/data/h2-signatures.js +211 -0
  124. package/dist/data/h2-signatures.js.map +1 -0
  125. package/dist/data/header-order.d.ts +38 -0
  126. package/dist/data/header-order.d.ts.map +1 -0
  127. package/dist/data/header-order.js +185 -0
  128. package/dist/data/header-order.js.map +1 -0
  129. package/dist/data/jarm-signatures.d.ts +25 -0
  130. package/dist/data/jarm-signatures.d.ts.map +1 -0
  131. package/dist/data/jarm-signatures.js +213 -0
  132. package/dist/data/jarm-signatures.js.map +1 -0
  133. package/dist/data/saas-patterns.d.ts +23 -0
  134. package/dist/data/saas-patterns.d.ts.map +1 -0
  135. package/dist/data/saas-patterns.js +139 -0
  136. package/dist/data/saas-patterns.js.map +1 -0
  137. package/dist/data/sensitive-paths.d.ts +12 -0
  138. package/dist/data/sensitive-paths.d.ts.map +1 -0
  139. package/dist/data/sensitive-paths.js +1539 -0
  140. package/dist/data/sensitive-paths.js.map +1 -0
  141. package/dist/data/service-banners.d.ts +59 -0
  142. package/dist/data/service-banners.d.ts.map +1 -0
  143. package/dist/data/service-banners.js +323 -0
  144. package/dist/data/service-banners.js.map +1 -0
  145. package/dist/data/smtp-signatures.d.ts +12 -0
  146. package/dist/data/smtp-signatures.d.ts.map +1 -0
  147. package/dist/data/smtp-signatures.js +350 -0
  148. package/dist/data/smtp-signatures.js.map +1 -0
  149. package/dist/data/takeover-patterns.d.ts +37 -0
  150. package/dist/data/takeover-patterns.d.ts.map +1 -0
  151. package/dist/data/takeover-patterns.js +249 -0
  152. package/dist/data/takeover-patterns.js.map +1 -0
  153. package/dist/data/tech-patterns.d.ts +44 -0
  154. package/dist/data/tech-patterns.d.ts.map +1 -0
  155. package/dist/data/tech-patterns.js +690 -0
  156. package/dist/data/tech-patterns.js.map +1 -0
  157. package/dist/data/waf-signatures.d.ts +21 -0
  158. package/dist/data/waf-signatures.d.ts.map +1 -0
  159. package/dist/data/waf-signatures.js +318 -0
  160. package/dist/data/waf-signatures.js.map +1 -0
  161. package/dist/dns/index.d.ts +3 -0
  162. package/dist/dns/index.d.ts.map +1 -0
  163. package/dist/dns/index.js +1067 -0
  164. package/dist/dns/index.js.map +1 -0
  165. package/dist/enum/index.d.ts +3 -0
  166. package/dist/enum/index.d.ts.map +1 -0
  167. package/dist/enum/index.js +818 -0
  168. package/dist/enum/index.js.map +1 -0
  169. package/dist/h2/index.d.ts +3 -0
  170. package/dist/h2/index.d.ts.map +1 -0
  171. package/dist/h2/index.js +414 -0
  172. package/dist/h2/index.js.map +1 -0
  173. package/dist/http/index.d.ts +3 -0
  174. package/dist/http/index.d.ts.map +1 -0
  175. package/dist/http/index.js +2444 -0
  176. package/dist/http/index.js.map +1 -0
  177. package/dist/identify/index.d.ts +3 -0
  178. package/dist/identify/index.d.ts.map +1 -0
  179. package/dist/identify/index.js +447 -0
  180. package/dist/identify/index.js.map +1 -0
  181. package/dist/index.d.ts +3 -0
  182. package/dist/index.d.ts.map +1 -0
  183. package/dist/index.js +165 -0
  184. package/dist/index.js.map +1 -0
  185. package/dist/infra/index.d.ts +3 -0
  186. package/dist/infra/index.d.ts.map +1 -0
  187. package/dist/infra/index.js +989 -0
  188. package/dist/infra/index.js.map +1 -0
  189. package/dist/iot/index.d.ts +3 -0
  190. package/dist/iot/index.d.ts.map +1 -0
  191. package/dist/iot/index.js +610 -0
  192. package/dist/iot/index.js.map +1 -0
  193. package/dist/meta/index.d.ts +3 -0
  194. package/dist/meta/index.d.ts.map +1 -0
  195. package/dist/meta/index.js +442 -0
  196. package/dist/meta/index.js.map +1 -0
  197. package/dist/osint/index.d.ts +3 -0
  198. package/dist/osint/index.d.ts.map +1 -0
  199. package/dist/osint/index.js +687 -0
  200. package/dist/osint/index.js.map +1 -0
  201. package/dist/passive/index.d.ts +3 -0
  202. package/dist/passive/index.d.ts.map +1 -0
  203. package/dist/passive/index.js +944 -0
  204. package/dist/passive/index.js.map +1 -0
  205. package/dist/path/index.d.ts +3 -0
  206. package/dist/path/index.d.ts.map +1 -0
  207. package/dist/path/index.js +878 -0
  208. package/dist/path/index.js.map +1 -0
  209. package/dist/protocol/mcp-server.d.ts +4 -0
  210. package/dist/protocol/mcp-server.d.ts.map +1 -0
  211. package/dist/protocol/mcp-server.js +32 -0
  212. package/dist/protocol/mcp-server.js.map +1 -0
  213. package/dist/protocol/tools.d.ts +3 -0
  214. package/dist/protocol/tools.d.ts.map +1 -0
  215. package/dist/protocol/tools.js +5 -0
  216. package/dist/protocol/tools.js.map +1 -0
  217. package/dist/service/index.d.ts +3 -0
  218. package/dist/service/index.d.ts.map +1 -0
  219. package/dist/service/index.js +1053 -0
  220. package/dist/service/index.js.map +1 -0
  221. package/dist/smtp/index.d.ts +3 -0
  222. package/dist/smtp/index.d.ts.map +1 -0
  223. package/dist/smtp/index.js +437 -0
  224. package/dist/smtp/index.js.map +1 -0
  225. package/dist/ssh/index.d.ts +3 -0
  226. package/dist/ssh/index.d.ts.map +1 -0
  227. package/dist/ssh/index.js +676 -0
  228. package/dist/ssh/index.js.map +1 -0
  229. package/dist/tcp/index.d.ts +3 -0
  230. package/dist/tcp/index.d.ts.map +1 -0
  231. package/dist/tcp/index.js +369 -0
  232. package/dist/tcp/index.js.map +1 -0
  233. package/dist/timing/index.d.ts +3 -0
  234. package/dist/timing/index.d.ts.map +1 -0
  235. package/dist/timing/index.js +425 -0
  236. package/dist/timing/index.js.map +1 -0
  237. package/dist/tls/index.d.ts +3 -0
  238. package/dist/tls/index.d.ts.map +1 -0
  239. package/dist/tls/index.js +1332 -0
  240. package/dist/tls/index.js.map +1 -0
  241. package/dist/types/index.d.ts +26 -0
  242. package/dist/types/index.d.ts.map +1 -0
  243. package/dist/types/index.js +8 -0
  244. package/dist/types/index.js.map +1 -0
  245. package/dist/utils/cache.d.ts +11 -0
  246. package/dist/utils/cache.d.ts.map +1 -0
  247. package/dist/utils/cache.js +35 -0
  248. package/dist/utils/cache.js.map +1 -0
  249. package/dist/utils/murmurhash3.d.ts +3 -0
  250. package/dist/utils/murmurhash3.d.ts.map +1 -0
  251. package/dist/utils/murmurhash3.js +57 -0
  252. package/dist/utils/murmurhash3.js.map +1 -0
  253. package/dist/utils/rate-limiter.d.ts +10 -0
  254. package/dist/utils/rate-limiter.d.ts.map +1 -0
  255. package/dist/utils/rate-limiter.js +35 -0
  256. package/dist/utils/rate-limiter.js.map +1 -0
  257. package/dist/utils/require-key.d.ts +2 -0
  258. package/dist/utils/require-key.d.ts.map +1 -0
  259. package/dist/utils/require-key.js +8 -0
  260. package/dist/utils/require-key.js.map +1 -0
  261. package/dist/waf/index.d.ts +3 -0
  262. package/dist/waf/index.d.ts.map +1 -0
  263. package/dist/waf/index.js +767 -0
  264. package/dist/waf/index.js.map +1 -0
  265. package/dist/web/index.d.ts +3 -0
  266. package/dist/web/index.d.ts.map +1 -0
  267. package/dist/web/index.js +1366 -0
  268. package/dist/web/index.js.map +1 -0
  269. package/package.json +66 -0
package/README.zh.md ADDED
@@ -0,0 +1,768 @@
1
+ <p align="center">
2
+ <a href="README.md">English</a> |
3
+ <strong>简体中文</strong> |
4
+ <a href="README.zh-TW.md">繁體中文</a> |
5
+ <a href="README.ko.md">한국어</a> |
6
+ <a href="README.de.md">Deutsch</a> |
7
+ <a href="README.es.md">Español</a> |
8
+ <a href="README.fr.md">Français</a> |
9
+ <a href="README.it.md">Italiano</a> |
10
+ <a href="README.da.md">Dansk</a> |
11
+ <a href="README.ja.md">日本語</a> |
12
+ <a href="README.pl.md">Polski</a> |
13
+ <a href="README.ru.md">Русский</a> |
14
+ <a href="README.bs.md">Bosanski</a> |
15
+ <a href="README.ar.md">العربية</a> |
16
+ <a href="README.no.md">Norsk</a> |
17
+ <a href="README.pt-BR.md">Português (Brasil)</a> |
18
+ <a href="README.th.md">ไทย</a> |
19
+ <a href="README.tr.md">Türkçe</a> |
20
+ <a href="README.uk.md">Українська</a> |
21
+ <a href="README.bn.md">বাংলা</a> |
22
+ <a href="README.el.md">Ελληνικά</a> |
23
+ <a href="README.vi.md">Tiếng Việt</a> |
24
+ <a href="README.hi.md">हिन्दी</a>
25
+ </p>
26
+
27
+ <p align="center">
28
+ <br>
29
+ <picture>
30
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg">
31
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-light.svg">
32
+ <img alt="fingerprint-mcp" src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg" width="700">
33
+ </picture>
34
+ </p>
35
+
36
+ <h3 align="center">面向 AI 智能体的通用数字指纹识别。</h3>
37
+
38
+ <p align="center">
39
+ TCP、TLS/SSL、SSH、HTTP、DNS、WAF/CDN、IoT、SMTP、服务探测、JARM、JA4X、favicon 哈希、基础设施拓扑、C2 检测、OSINT 情报富化 &mdash; 统一集成到单一 MCP 服务器中。<br>
40
+ 您的 AI 智能体可以<b>按需获取全谱指纹识别能力</b>,而不是使用 11 个互不关联的 CLI 工具并手动关联数据。
41
+ </p>
42
+
43
+ <br>
44
+
45
+ <p align="center">
46
+ <a href="#问题所在">问题所在</a> &bull;
47
+ <a href="#差异化优势">差异化优势</a> &bull;
48
+ <a href="#快速开始">快速开始</a> &bull;
49
+ <a href="#ai-能做什么">AI 能做什么</a> &bull;
50
+ <a href="#工具参考13-个工具103-项技术">工具 (13)</a> &bull;
51
+ <a href="#数据源21-个">数据源</a> &bull;
52
+ <a href="#架构">架构</a> &bull;
53
+ <a href="CHANGELOG.md">更新日志</a> &bull;
54
+ <a href="CONTRIBUTING.md">参与贡献</a>
55
+ </p>
56
+
57
+ <p align="center">
58
+ <a href="https://www.npmjs.com/package/fingerprint-mcp"><img src="https://img.shields.io/npm/v/fingerprint-mcp.svg" alt="npm"></a>
59
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="许可证"></a>
60
+ <img src="https://img.shields.io/badge/runtime-Bun-f472b6" alt="Bun">
61
+ <img src="https://img.shields.io/badge/protocol-MCP-8b5cf6" alt="MCP">
62
+ <img src="https://img.shields.io/badge/tools-13-ef4444" alt="13 个工具">
63
+ <img src="https://img.shields.io/badge/techniques-103-f97316" alt="103 项技术">
64
+ </p>
65
+
66
+ <p align="center">
67
+ <img src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/demo.gif" alt="fingerprint-mcp 演示" width="800">
68
+ </p>
69
+
70
+ ---
71
+
72
+ ## 问题所在
73
+
74
+ 当前对服务器进行指纹识别意味着需要同时使用十几种互不关联的工具。你需要运行 `nmap` 进行端口扫描、`testssl.sh` 进行证书分析、`curl -I` 获取 HTTP 头、`dig` 查询 DNS、`wafw00f` 检测 WAF、`ssh-audit` 审计 SSH,还有单独的 JARM 工具、Wappalyzer 检测技术栈 &mdash; 然后你需要花 30 分钟在电子表格中手动交叉比对所有结果,才能弄清楚目标到底运行着什么。
75
+
76
+ ```
77
+ 传统指纹识别工作流:
78
+ 分析 TLS 证书 -> testssl.sh / openssl s_client
79
+ 抓取 HTTP 头 -> curl -I
80
+ 检测 Web 技术 -> wappalyzer CLI
81
+ DNS 侦察 -> dig / nslookup / dnsenum
82
+ 端口扫描 -> nmap -sV
83
+ WAF 检测 -> wafw00f
84
+ SSH 审计 -> ssh-audit
85
+ 服务指纹识别 -> nmap scripts
86
+ JARM 指纹 -> jarm(单独工具)
87
+ 查询 OSINT 数据库 -> shodan CLI, censys CLI
88
+ 关联所有结果 -> 手动在电子表格中操作
89
+ ──────────────────────────────
90
+ 合计:11 个工具,30+ 分钟,手动关联
91
+ ```
92
+
93
+ **fingerprint-mcp** 通过 [Model Context Protocol](https://modelcontextprotocol.io) 为您的 AI 智能体提供 13 个复合工具,封装了来自 21 个提供商的 103 项指纹识别技术。智能体可以并行执行多层指纹识别,跨 TCP/TLS/HTTP/DNS/SSH 层关联信号,检测蜜罐和 C2 基础设施,并呈现统一的情报视图 &mdash; 一切都在一次对话中完成。
94
+
95
+ ```
96
+ 使用 fingerprint-mcp:
97
+ 你:"对 target.com 进行深度侦察"
98
+
99
+ 智能体:-> recon {url: "https://target.com", depth: "deep"}
100
+
101
+ -> TLS:nginx/1.24.0(通过 JARM (3fd21b20d00000...)),
102
+ Let's Encrypt 证书,2 个 SAN,TLS 1.2+1.3
103
+ -> HTTP:Cloudflare WAF 后的 Express.js,
104
+ React SPA,Google Analytics,分析了 14 个安全头
105
+ -> DNS:A/AAAA/MX/TXT 记录,SPF/DKIM/DMARC 已配置,
106
+ 通过 CNAME/MX 检测到 Slack + Google Workspace
107
+ -> 端口:80、443、22 (OpenSSH 9.6)、8080(开发服务器)
108
+ -> WAF:检测到 Cloudflare,通过直接连接发现源站 IP
109
+ -> 枚举:通过 CT 日志发现 12 个子域名,检测到通配符 DNS
110
+ -> "target.com 运行 nginx/1.24.0 + Express.js,位于
111
+ Cloudflare WAF 之后。源站 IP 203.0.113.42 暴露在
112
+ 8080 端口。TLS 配置正确(等效 A+),但 8080 上的
113
+ 开发服务器没有 WAF 保护。3 个子域名指向已废弃的
114
+ 基础设施 — 存在接管风险。"
115
+ ```
116
+
117
+ ---
118
+
119
+ ## 差异化优势
120
+
121
+ 现有工具一次只能在一个层面提供原始数据。fingerprint-mcp 赋予你的 AI 智能体**同时跨所有指纹识别层进行推理**的能力。
122
+
123
+ <table>
124
+ <thead>
125
+ <tr>
126
+ <th></th>
127
+ <th>传统方式</th>
128
+ <th>fingerprint-mcp</th>
129
+ </tr>
130
+ </thead>
131
+ <tbody>
132
+ <tr>
133
+ <td><b>接口</b></td>
134
+ <td>11 种不同的 CLI 工具,输出格式各异</td>
135
+ <td>MCP &mdash; AI 智能体以对话方式调用工具</td>
136
+ </tr>
137
+ <tr>
138
+ <td><b>技术</b></td>
139
+ <td>一次一个工具、一个层面</td>
140
+ <td>103 项技术,来自 21 个提供商,并行执行</td>
141
+ </tr>
142
+ <tr>
143
+ <td><b>TLS 分析</b></td>
144
+ <td>testssl.sh 输出,手动单独解析 JARM</td>
145
+ <td>智能体在一次调用中整合证书 + JARM + JA4X + 密码套件 + SNI + CT 日志</td>
146
+ </tr>
147
+ <tr>
148
+ <td><b>关联</b></td>
149
+ <td>将结果复制粘贴到电子表格</td>
150
+ <td>智能体交叉关联:"JARM 匹配已知 C2 框架,HTTP 时序确认蜜罐"</td>
151
+ </tr>
152
+ <tr>
153
+ <td><b>WAF 绕过</b></td>
154
+ <td>wafw00f 检测到 WAF,你手动寻找源站</td>
155
+ <td>智能体检测 WAF、发现源站 IP,并验证其提供相同内容</td>
156
+ </tr>
157
+ <tr>
158
+ <td><b>API 密钥</b></td>
159
+ <td>Shodan、Censys 等需要密钥</td>
160
+ <td>80+ 项主动技术无需任何 API 密钥;密钥可解锁 OSINT 情报富化</td>
161
+ </tr>
162
+ <tr>
163
+ <td><b>安装</b></td>
164
+ <td>安装 nmap、testssl、wafw00f、ssh-audit、jarm、wappalyzer...</td>
165
+ <td><code>npx fingerprint-mcp</code> &mdash; 一条命令,零配置</td>
166
+ </tr>
167
+ </tbody>
168
+ </table>
169
+
170
+ ---
171
+
172
+ ## 快速开始
173
+
174
+ ### 方式一:npx(免安装)
175
+
176
+ ```bash
177
+ npx fingerprint-mcp
178
+ ```
179
+
180
+ 所有 80+ 项主动指纹识别技术立即可用。TCP、TLS、SSH、HTTP、DNS、WAF、路径、服务、时序、IoT、SMTP、基础设施和应用程序指纹识别均无需 API 密钥。
181
+
182
+ ### 方式二:克隆仓库
183
+
184
+ ```bash
185
+ git clone https://github.com/badchars/fingerprint-mcp.git
186
+ cd fingerprint-mcp
187
+ bun install
188
+ ```
189
+
190
+ ### 环境变量(可选)
191
+
192
+ ```bash
193
+ # OSINT 情报富化(全部可选 — 主动指纹识别无需任何密钥即可工作)
194
+ export SHODAN_API_KEY=your-key # 启用 osint_shodan、ssh_hostkey_lookup
195
+ export CENSYS_API_ID=your-id # 启用 osint_censys(免费:250 次查询/月)
196
+ export CENSYS_API_SECRET=your-secret # Censys API 密钥
197
+ export SECURITYTRAILS_API_KEY=your-key # 启用 waf_origin、enum_passive_dns
198
+ export VIRUSTOTAL_API_KEY=your-key # 启用 osint_virustotal(免费:500 次查询/天)
199
+ ```
200
+
201
+ 所有 API 密钥均为可选。没有密钥,你仍然可以使用完整的 TCP/TLS/SSH/HTTP/DNS/WAF/路径/服务/时序/IoT/SMTP/基础设施/应用程序指纹识别、关联、被动分析、枚举和元数据工具 &mdash; 80+ 项技术通过直接探测目标工作。
202
+
203
+ ### 连接你的 AI 智能体
204
+
205
+ <details open>
206
+ <summary><b>Claude Code</b></summary>
207
+
208
+ ```bash
209
+ # 使用 npx
210
+ claude mcp add fingerprint-mcp -- npx fingerprint-mcp
211
+
212
+ # 使用本地克隆
213
+ claude mcp add fingerprint-mcp -- bun run /path/to/fingerprint-mcp/src/index.ts
214
+ ```
215
+
216
+ </details>
217
+
218
+ <details>
219
+ <summary><b>Claude Desktop</b></summary>
220
+
221
+ 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`:
222
+
223
+ ```json
224
+ {
225
+ "mcpServers": {
226
+ "fingerprint": {
227
+ "command": "npx",
228
+ "args": ["-y", "fingerprint-mcp"],
229
+ "env": {
230
+ "SHODAN_API_KEY": "optional",
231
+ "CENSYS_API_ID": "optional",
232
+ "CENSYS_API_SECRET": "optional",
233
+ "SECURITYTRAILS_API_KEY": "optional",
234
+ "VIRUSTOTAL_API_KEY": "optional"
235
+ }
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ </details>
242
+
243
+ <details>
244
+ <summary><b>Cursor / Windsurf / 其他 MCP 客户端</b></summary>
245
+
246
+ 相同的 JSON 配置格式。将命令指向 `npx fingerprint-mcp` 或你的本地安装路径。
247
+
248
+ </details>
249
+
250
+ ### 开始查询
251
+
252
+ ```
253
+ 你:"对 target.com 的所有内容进行指纹识别 — TLS、HTTP 栈、WAF、DNS、开放端口"
254
+ ```
255
+
256
+ 就是这样。智能体会自动处理多层指纹识别、信号关联和基础设施分析。
257
+
258
+ ---
259
+
260
+ ## AI 能做什么
261
+
262
+ ### 快速侦察
263
+
264
+ ```
265
+ 你:"快速侦察 target.com"
266
+
267
+ 智能体:-> recon {url: "https://target.com", depth: "quick"}
268
+
269
+ -> TCP:端口 80、443、22 开放
270
+ -> TLS:Let's Encrypt RSA 证书,TLS 1.2+1.3,nginx JARM 签名
271
+ -> HTTP:nginx/1.24.0,Express.js,React,Cloudflare CDN
272
+ -> DNS:A 203.0.113.42,MX Google Workspace,SPF/DKIM 已配置
273
+ -> WAF:检测到 Cloudflare(cf-ray 头)
274
+ -> "target.com 是一个 React SPA,运行在 Express.js 上,
275
+ 位于 nginx/1.24.0 之后,通过 Cloudflare CDN 提供服务。
276
+ TLS 使用 Let's Encrypt 正确配置。SSH 在 22 端口运行
277
+ OpenSSH 9.6。邮件由 Google Workspace 处理,完整配置了
278
+ SPF/DKIM/DMARC。"
279
+ ```
280
+
281
+ ### 深度 TLS 调查
282
+
283
+ ```
284
+ 你:"详细分析 suspicious-server.com 的 TLS 配置"
285
+
286
+ 智能体:-> scan_tls {host: "suspicious-server.com"}
287
+
288
+ -> 证书:自签名,CN=localhost,已过期 47 天
289
+ -> JARM:2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
290
+ (匹配 Cobalt Strike 默认配置)
291
+ -> JA4X:指纹匹配已知 C2 框架模式
292
+ -> 密码套件:接受弱密码(RC4、3DES)
293
+ -> SNI:对任何 SNI 值响应相同
294
+ -> CT 日志:证书未记录(非公开信任)
295
+ -> "高风险:TLS 配置强烈表明这是 C2 基础设施。
296
+ 自签名过期证书,JARM 指纹匹配 Cobalt Strike,
297
+ 接受弱密码,对任意 SNI 值响应。
298
+ 建议立即调查并封锁。"
299
+ ```
300
+
301
+ ### WAF 绕过与源站发现
302
+
303
+ ```
304
+ 你:"target.com 位于 WAF 后面。你能找到源站服务器吗?"
305
+
306
+ 智能体:-> scan_waf {url: "https://target.com"}
307
+ -> scan_dns {domain: "target.com"}
308
+ -> enumerate {domain: "target.com"}
309
+
310
+ -> WAF:Cloudflare (AS13335),对可疑请求显示验证页面
311
+ -> DNS:A 记录指向 Cloudflare IP 104.21.x.x
312
+ -> 子域名:dev.target.com 解析到 203.0.113.42(非 Cloudflare)
313
+ -> 直接连接 203.0.113.42:443 返回相同 TLS 证书
314
+ -> SecurityTrails 历史记录:Cloudflare 之前源站为 203.0.113.42
315
+ -> "已找到源站 IP:203.0.113.42。通过 dev.target.com
316
+ 子域名发现,该子域名绕过了 Cloudflare。源站提供相同的
317
+ TLS 证书并响应 target.com 的 Host 头。
318
+ 源站没有 WAF 保护 — 可以直接访问。"
319
+ ```
320
+
321
+ ### 主机上的服务发现
322
+
323
+ ```
324
+ 你:"10.0.1.50 上运行着哪些服务?"
325
+
326
+ 智能体:-> scan_ports {host: "10.0.1.50"}
327
+ -> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
328
+
329
+ -> 端口 22:OpenSSH 8.9p1 Ubuntu,ED25519 主机密钥
330
+ -> 端口 80:Apache/2.4.57,PHP/8.2,WordPress 6.4
331
+ -> 端口 3306:MySQL 8.0.36,需要认证
332
+ -> 端口 5432:PostgreSQL 16.1,需要 SSL
333
+ -> 端口 6379:Redis 7.2.4,无认证(开放)
334
+ -> 端口 8080:Node.js Express 开发服务器,CORS: *
335
+ -> "严重:6379 端口的 Redis 无需认证 — 网络上的任何人
336
+ 都可以读写数据。8080 上的 Express 开发服务器
337
+ 具有通配符 CORS。MySQL 和 PostgreSQL 正确要求认证。
338
+ WordPress 落后 2 个小版本。需要立即处理
339
+ Redis 和开发服务器暴露问题。"
340
+ ```
341
+
342
+ ---
343
+
344
+ ## 工具参考(13 个工具,103 项技术)
345
+
346
+ <details open>
347
+ <summary><b>recon &mdash; 基于深度级别选择技术的全面侦察</b></summary>
348
+
349
+ | 参数 | 类型 | 描述 |
350
+ |------|------|------|
351
+ | `url` | string | 目标指纹识别 URL |
352
+ | `depth` | `quick` \| `standard` \| `deep` | 扫描深度:quick=5 项技术,standard=20,deep=50+ |
353
+
354
+ 根据深度级别编排所有提供商的技术。快速模式提供快速概览;深度模式运行全面指纹识别,包括枚举、OSINT 和关联。
355
+
356
+ </details>
357
+
358
+ <details>
359
+ <summary><b>scan_ports &mdash; TCP 端口扫描与服务检测(3 项技术)</b></summary>
360
+
361
+ | 参数 | 类型 | 描述 |
362
+ |------|------|------|
363
+ | `host` | string | 目标主机(IP 或域名) |
364
+ | `ports` | number[] | 可选 &mdash; 指定扫描端口(默认为常用端口) |
365
+
366
+ | 技术 | 描述 |
367
+ |------|------|
368
+ | `tcp_probe` | TCP 连接扫描以检测开放端口 |
369
+ | `tcp_banner` | 对开放端口进行 Banner 抓取以识别服务 |
370
+ | `tcp_analysis` | 端口组合分析和服务推断 |
371
+
372
+ </details>
373
+
374
+ <details>
375
+ <summary><b>scan_tls &mdash; 完整 TLS/SSL 分析(8 项技术)</b></summary>
376
+
377
+ | 参数 | 类型 | 描述 |
378
+ |------|------|------|
379
+ | `host` | string | 目标主机(IP 或域名) |
380
+ | `port` | number | 可选 &mdash; TLS 端口(默认:443) |
381
+
382
+ | 技术 | 描述 |
383
+ |------|------|
384
+ | `tls_certificate` | X.509 证书解析 &mdash; 主题、签发者、SAN、有效期、证书链 |
385
+ | `tls_jarm` | JARM 主动指纹识别 &mdash; 10 个 TLS Client Hello 探测,62 字符哈希 |
386
+ | `tls_ja4x` | JA4X 基于证书属性的被动 TLS 指纹识别 |
387
+ | `tls_ciphers` | 密码套件枚举和强度分析 |
388
+ | `tls_protocols` | 支持的 TLS 协议版本检测(SSLv3 到 TLS 1.3) |
389
+ | `tls_sni` | SNI 行为测试 &mdash; 默认证书与请求的主机名对比 |
390
+ | `tls_ct_logs` | 通过 crt.sh 查询证书透明度日志 |
391
+ | `tls_ocsp` | OCSP 装订和吊销状态检查 |
392
+
393
+ </details>
394
+
395
+ <details>
396
+ <summary><b>scan_dns &mdash; DNS 情报(7 项技术)</b></summary>
397
+
398
+ | 参数 | 类型 | 描述 |
399
+ |------|------|------|
400
+ | `domain` | string | 目标域名 |
401
+
402
+ | 技术 | 描述 |
403
+ |------|------|
404
+ | `dns_records` | 完整记录枚举 &mdash; A、AAAA、MX、NS、TXT、CNAME、SOA |
405
+ | `dns_email_auth` | SPF、DKIM 和 DMARC 记录分析 |
406
+ | `dns_saas` | 通过 CNAME 和 MX 模式检测 SaaS/服务(Slack、Zendesk 等) |
407
+ | `dns_server` | DNS 服务器指纹识别(BIND、PowerDNS、Cloudflare 等) |
408
+ | `dns_takeover` | 通过悬空 CNAME 分析检测子域名接管 |
409
+ | `dns_zone` | 域传送尝试 (AXFR) |
410
+ | `dns_caa` | CAA 记录分析,用于证书颁发机构限制 |
411
+
412
+ </details>
413
+
414
+ <details>
415
+ <summary><b>scan_http &mdash; HTTP/Web 指纹识别(29 项技术)</b></summary>
416
+
417
+ | 参数 | 类型 | 描述 |
418
+ |------|------|------|
419
+ | `url` | string | 目标 URL |
420
+
421
+ | 技术 | 提供商 | 描述 |
422
+ |------|--------|------|
423
+ | `http_headers` | HTTP | 响应头分析和服务器识别 |
424
+ | `http_header_order` | HTTP | 头部排序指纹(服务器软件签名) |
425
+ | `http_security_headers` | HTTP | 安全头审计(CSP、HSTS、X-Frame-Options 等) |
426
+ | `http_cookies` | HTTP | Cookie 分析 &mdash; 标志、前缀、框架检测 |
427
+ | `http_methods` | HTTP | 允许的 HTTP 方法枚举 (OPTIONS) |
428
+ | `http_cors` | HTTP | CORS 策略分析和错误配置检测 |
429
+ | `http_compression` | HTTP | 支持的压缩算法(gzip、br、zstd) |
430
+ | `http_caching` | HTTP | 缓存头分析(CDN、反向代理检测) |
431
+ | `http_etag` | HTTP | ETag 格式分析,用于后端识别 |
432
+ | `http_error` | HTTP | 错误页面指纹识别(自定义与默认错误页面) |
433
+ | `http_redirect` | HTTP | 重定向链分析 |
434
+ | `http_timing` | HTTP | 响应时序基线,用于服务器性能分析 |
435
+ | `http_favicon` | HTTP | Favicon 哈希 (MurmurHash3),用于技术识别 |
436
+ | `http_robots` | HTTP | robots.txt 解析和禁止路径提取 |
437
+ | `http_sitemap` | HTTP | 站点地图发现和 URL 提取 |
438
+ | `http_wellknown` | HTTP | .well-known 端点发现(security.txt、openid 等) |
439
+ | `web_tech` | Web | 通过 HTML/JS/CSS 模式进行技术检测 |
440
+ | `web_analytics` | Web | 分析和跟踪服务检测 |
441
+ | `web_sourcemaps` | Web | Source map 文件发现 |
442
+ | `web_websocket` | Web | WebSocket 端点检测 |
443
+ | `web_graphql` | Web | GraphQL 端点检测和内省 |
444
+ | `web_spa` | Web | 单页应用框架检测 |
445
+ | `web_cdn` | Web | 通过响应头和 DNS 进行 CDN 检测 |
446
+ | `web_meta` | Web | HTML meta 标签分析(生成器、框架提示) |
447
+ | `web_feed` | Web | RSS/Atom 订阅源发现 |
448
+ | `h2_detect` | HTTP/2 | HTTP/2 协议支持检测 |
449
+ | `h2_fingerprint` | HTTP/2 | HTTP/2 服务器指纹识别(SETTINGS、WINDOW_UPDATE) |
450
+ | `h2_h3` | HTTP/2 | 通过 Alt-Svc 头检测 HTTP/3 (QUIC) 支持 |
451
+ | `app_cms` | Application | CMS 检测(WordPress、Drupal、Joomla 等) |
452
+
453
+ </details>
454
+
455
+ <details>
456
+ <summary><b>scan_paths &mdash; 路径情报(5 项技术)</b></summary>
457
+
458
+ | 参数 | 类型 | 描述 |
459
+ |------|------|------|
460
+ | `url` | string | 目标 URL |
461
+ | `categories` | string[] | 可选 &mdash; 要检查的类别(sensitive、git、debug、api、config) |
462
+
463
+ | 技术 | 描述 |
464
+ |------|------|
465
+ | `path_sensitive` | 敏感文件发现(备份文件、配置文件、数据库转储) |
466
+ | `path_robots` | robots.txt 和 sitemap.xml 分析以发现隐藏路径 |
467
+ | `path_git` | Git 仓库泄漏检测(.git/HEAD、.git/config) |
468
+ | `path_debug` | 调试端点发现(phpinfo、server-status、调试控制台) |
469
+ | `path_api` | API 版本和文档端点发现 |
470
+
471
+ </details>
472
+
473
+ <details>
474
+ <summary><b>scan_waf &mdash; WAF/CDN 检测与指纹识别(4 项技术)</b></summary>
475
+
476
+ | 参数 | 类型 | 描述 |
477
+ |------|------|------|
478
+ | `url` | string | 目标 URL |
479
+
480
+ | 技术 | 描述 |
481
+ |------|------|
482
+ | `waf_detect` | 通过响应头和行为分析检测 WAF 存在 |
483
+ | `waf_cdn` | CDN 提供商识别(Cloudflare、Akamai、Fastly 等) |
484
+ | `waf_fingerprint` | WAF 产品识别和版本检测 |
485
+ | `waf_origin` | WAF/CDN 后的源站 IP 发现(需要 `SECURITYTRAILS_API_KEY`) |
486
+
487
+ </details>
488
+
489
+ <details>
490
+ <summary><b>scan_services &mdash; 服务级探测(12 项技术)</b></summary>
491
+
492
+ | 参数 | 类型 | 描述 |
493
+ |------|------|------|
494
+ | `host` | string | 目标主机(IP 或域名) |
495
+ | `ports` | number[] | 可选 &mdash; 指定探测端口 |
496
+ | `service` | string | 可选 &mdash; 指定探测服务(mysql、postgres、redis、ftp、ssh、smtp、vnc、iot) |
497
+
498
+ | 技术 | 提供商 | 描述 |
499
+ |------|--------|------|
500
+ | `ssh_probe` | SSH | SSH 协议版本和软件检测 |
501
+ | `ssh_algorithms` | SSH | SSH 算法审计(KEX、密码、MAC、主机密钥类型) |
502
+ | `ssh_hostkey_lookup` | SSH | 通过 Shodan 查找 SSH 主机密钥(需要 `SHODAN_API_KEY`) |
503
+ | `svc_mysql` | Service | MySQL 版本检测和功能指纹识别 |
504
+ | `svc_postgres` | Service | PostgreSQL 版本检测和 SSL 支持检查 |
505
+ | `svc_redis` | Service | Redis 版本检测和认证状态 |
506
+ | `svc_ftp` | Service | FTP Banner 分析和匿名登录检查 |
507
+ | `svc_vnc_rdp` | Service | VNC/RDP 服务检测和安全评估 |
508
+ | `smtp_banner` | SMTP | SMTP Banner 分析和 MTA 识别 |
509
+ | `smtp_starttls` | SMTP | SMTP STARTTLS 支持和证书检查 |
510
+ | `iot_detect` | IoT | 通过 Banner 模式和默认页面检测 IoT 设备 |
511
+ | `iot_upnp` | IoT | 本地网络上的 UPnP/SSDP 设备发现 |
512
+
513
+ </details>
514
+
515
+ <details>
516
+ <summary><b>enumerate &mdash; 范围扩展(8 项技术)</b></summary>
517
+
518
+ | 参数 | 类型 | 描述 |
519
+ |------|------|------|
520
+ | `domain` | string | 目标域名 |
521
+
522
+ | 技术 | 描述 |
523
+ |------|------|
524
+ | `enum_subdomains` | 通过多种方法枚举子域名 |
525
+ | `enum_wildcard` | 通配符 DNS 检测 |
526
+ | `enum_tld` | TLD 扩展(target.com -> target.net、target.org 等) |
527
+ | `enum_related` | 通过共享基础设施发现相关域名 |
528
+ | `enum_asn` | ASN 邻居发现 &mdash; 同一网络上的其他域名 |
529
+ | `enum_ct` | 证书透明度日志子域名提取 |
530
+ | `enum_passive_dns` | 被动 DNS 历史(需要 `SECURITYTRAILS_API_KEY`) |
531
+ | `enum_scope` | 范围摘要和攻击面概述 |
532
+
533
+ </details>
534
+
535
+ <details>
536
+ <summary><b>osint &mdash; OSINT 情报富化(6 项技术)</b></summary>
537
+
538
+ | 参数 | 类型 | 描述 |
539
+ |------|------|------|
540
+ | `target` | string | 要富化的 IP 地址或域名 |
541
+ | `type` | `ip` \| `domain` | 可选 &mdash; 目标类型(省略时自动检测) |
542
+
543
+ | 技术 | 认证 | 描述 |
544
+ |------|------|------|
545
+ | `osint_shodan` | `SHODAN_API_KEY` | Shodan 主机查询 &mdash; 开放端口、Banner、漏洞、操作系统 |
546
+ | `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Censys 主机数据 &mdash; 服务、TLS、自治系统 |
547
+ | `osint_reverse_ip` | 无 | 反向 IP 查询 &mdash; 同一 IP 上的其他域名 |
548
+ | `osint_whois` | 无 | WHOIS 注册数据 &mdash; 注册商、日期、域名服务器 |
549
+ | `osint_webarchive` | 无 | Web Archive 历史 &mdash; 首次/最后快照、变更频率 |
550
+ | `osint_virustotal` | `VIRUSTOTAL_API_KEY` | VirusTotal 域名/IP 报告 &mdash; 检测结果、分类、DNS |
551
+
552
+ </details>
553
+
554
+ <details>
555
+ <summary><b>analyze &mdash; 被动指纹分析(3 种模式)</b></summary>
556
+
557
+ | 参数 | 类型 | 描述 |
558
+ |------|------|------|
559
+ | `type` | `headers` \| `html` \| `banner` | 要分析的数据类型 |
560
+ | `data` | string | 要分析的原始数据(粘贴头部、HTML 或 Banner 输出) |
561
+
562
+ | 模式 | 描述 |
563
+ |------|------|
564
+ | `fp_analyze_headers` | 被动 HTTP 头分析 &mdash; 无需发送流量即可进行服务器、框架、代理检测 |
565
+ | `fp_analyze_html` | 被动 HTML 分析 &mdash; 从源码进行技术检测、框架识别 |
566
+ | `fp_analyze_banner` | 被动 Banner 分析 &mdash; 从原始 Banner 文本进行服务识别 |
567
+
568
+ </details>
569
+
570
+ <details>
571
+ <summary><b>correlate &mdash; 多信号关联引擎(7 种模式)</b></summary>
572
+
573
+ | 参数 | 类型 | 描述 |
574
+ |------|------|------|
575
+ | `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | 关联模式 |
576
+ | `signals` | object | 要关联的指纹信号(因模式而异) |
577
+
578
+ | 模式 | 描述 |
579
+ |------|------|
580
+ | `fp_consistency` | 跨层信号一致性检查 &mdash; TCP、TLS、HTTP 和 DNS 指纹是否一致? |
581
+ | `fp_honeypot` | 蜜罐检测 &mdash; 检查不可能的服务组合和行为异常 |
582
+ | `fp_spoofing` | 伪装检测 &mdash; 识别服务器头部与实际行为的不匹配 |
583
+ | `fp_compare` | 两台主机指纹配置的并排比较 |
584
+ | `fp_topology` | 基础设施拓扑映射 &mdash; CDN、负载均衡器、反向代理链 |
585
+ | `fp_c2` | 通过 JARM、TLS、HTTP 和时序关联进行 C2 框架检测 |
586
+ | `fp_identify` | 基于哈希的已知签名数据库识别 |
587
+
588
+ </details>
589
+
590
+ <details>
591
+ <summary><b>meta &mdash; 服务器配置和数据(3 种模式)</b></summary>
592
+
593
+ | 参数 | 类型 | 描述 |
594
+ |------|------|------|
595
+ | `category` | string | 可选 &mdash; 按类别过滤 |
596
+
597
+ | 模式 | 描述 |
598
+ |------|------|
599
+ | `fp_sources` | 列出所有可用数据源及其配置和 API 密钥状态 |
600
+ | `fp_config` | 服务器配置 &mdash; 版本、已加载的提供商、技术计数 |
601
+ | `fp_signatures` | 签名数据库列表 &mdash; JARM、Banner、WAF、应用程序签名 |
602
+
603
+ </details>
604
+
605
+ ---
606
+
607
+ ### CLI 用法
608
+
609
+ ```bash
610
+ # 列出所有可用的工具和技术
611
+ npx fingerprint-mcp --list
612
+
613
+ # 直接运行任意工具
614
+ npx fingerprint-mcp --tool recon '{"url":"https://example.com","depth":"quick"}'
615
+ npx fingerprint-mcp --tool scan_tls '{"host":"example.com"}'
616
+ npx fingerprint-mcp --tool scan_ports '{"host":"10.0.1.50","ports":[22,80,443,3306,8080]}'
617
+ npx fingerprint-mcp --tool scan_dns '{"domain":"example.com"}'
618
+ npx fingerprint-mcp --tool scan_http '{"url":"https://example.com"}'
619
+ npx fingerprint-mcp --tool scan_waf '{"url":"https://example.com"}'
620
+ npx fingerprint-mcp --tool scan_services '{"host":"10.0.1.50","service":"redis"}'
621
+ npx fingerprint-mcp --tool enumerate '{"domain":"example.com"}'
622
+ npx fingerprint-mcp --tool analyze '{"type":"headers","data":"Server: nginx/1.24.0\nX-Powered-By: Express"}'
623
+ npx fingerprint-mcp --tool correlate '{"type":"honeypot","signals":{"jarm":"...","banner":"..."}}'
624
+ npx fingerprint-mcp --tool meta '{}'
625
+
626
+ # OSINT 工具(需要 API 密钥)
627
+ SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
628
+ ```
629
+
630
+ ---
631
+
632
+ ## 数据源(21 个)
633
+
634
+ | 数据源 | 认证 | 提供的功能 |
635
+ |--------|------|-----------|
636
+ | TCP 探测 | 无 | 端口扫描、Banner 抓取、服务检测 |
637
+ | TLS/SSL 分析 | 无 | 证书解析、JARM 指纹识别、JA4X、密码枚举、SNI 测试 |
638
+ | SSH 探测 | 无 | 协议版本、算法审计、软件检测 |
639
+ | HTTP 分析 | 无 | 头部指纹识别、favicon 哈希、Cookie 分析、方法枚举、CORS |
640
+ | Web 检测 | 无 | 技术检测、分析、Source map、WebSocket、GraphQL、SPA 框架 |
641
+ | 路径发现 | 无 | 敏感文件、Git 泄漏、调试端点、API 版本、robots.txt |
642
+ | DNS 解析 | 无 | 记录枚举、邮件认证分析、SaaS 检测、服务器指纹识别 |
643
+ | WAF/CDN 检测 | 无 | WAF 识别、CDN 检测、WAF 指纹识别 |
644
+ | 时序分析 | 无 | 响应时序基线、时钟偏差检测 |
645
+ | HTTP/2 & HTTP/3 | 无 | HTTP/2 检测和指纹识别、HTTP/3 Alt-Svc 发现 |
646
+ | SMTP 探测 | 无 | SMTP Banner 分析、STARTTLS 检查 |
647
+ | IoT/嵌入式 | 无 | IoT 设备检测、UPnP/SSDP 发现 |
648
+ | 应用检测 | 无 | CMS、框架和电商平台识别 |
649
+ | 服务探测 | 无 | MySQL、PostgreSQL、Redis、FTP、VNC/RDP 指纹识别 |
650
+ | 基础设施检测 | 无 | 云提供商、托管提供商、CDN 识别 |
651
+ | 关联引擎 | 无 | 信号一致性、蜜罐检测、伪装检测、拓扑映射 |
652
+ | 识别引擎 | 无 | 基于哈希的识别、C2 检测、签名匹配 |
653
+ | [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | 主机情报 &mdash; 开放端口、Banner、漏洞、操作系统检测 |
654
+ | [Censys](https://censys.io) | `CENSYS_API_ID` | 主机数据 &mdash; 服务、TLS 证书、自治系统信息 |
655
+ | [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | WAF 源站发现、被动 DNS 历史、历史记录 |
656
+ | [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | 域名/IP 信誉、检测结果、DNS 历史、分类 |
657
+
658
+ ---
659
+
660
+ ## 架构
661
+
662
+ ```
663
+ src/
664
+ index.ts # CLI 入口(--help、--list、--tool、stdio 服务器)
665
+ protocol/
666
+ mcp-server.ts # MCP 服务器设置(stdio 传输)
667
+ tools.ts # 工具注册表 — 所有 13 个复合工具在此注册
668
+ types/
669
+ index.ts # 共享类型(ToolDef、ToolContext、ToolResult)
670
+ utils/
671
+ rate-limiter.ts # 按提供商的速率限制器
672
+ cache.ts # API 响应的 TTL 缓存
673
+ require-key.ts # API 密钥验证助手
674
+ murmurhash3.ts # 用于 favicon 哈希的 MurmurHash3
675
+ composite/ # 13 个复合工具编排器
676
+ recon.ts # 全面侦察编排器(quick/standard/deep)
677
+ scan-ports.ts # 端口扫描复合
678
+ scan-tls.ts # TLS 分析复合
679
+ scan-dns.ts # DNS 情报复合
680
+ scan-http.ts # HTTP 指纹识别复合
681
+ scan-paths.ts # 路径发现复合
682
+ scan-waf.ts # WAF/CDN 检测复合
683
+ scan-services.ts # 服务探测复合
684
+ analyze.ts # 被动分析复合
685
+ correlate.ts # 关联引擎复合
686
+ enumerate.ts # 范围扩展复合
687
+ osint.ts # OSINT 情报富化复合
688
+ meta.ts # 服务器元数据复合
689
+ helpers.ts # 共享复合助手
690
+ tcp/ # TCP 探测技术 (3)
691
+ tls/ # TLS/SSL 分析技术 (8)
692
+ ssh/ # SSH 探测技术 (3)
693
+ http/ # HTTP 指纹识别技术 (16)
694
+ web/ # Web 技术检测技术 (9)
695
+ path/ # 路径发现技术 (5)
696
+ dns/ # DNS 情报技术 (7)
697
+ waf/ # WAF/CDN 检测技术 (4)
698
+ timing/ # 时序分析技术 (2)
699
+ h2/ # HTTP/2 & HTTP/3 技术 (3)
700
+ smtp/ # SMTP 探测技术 (2)
701
+ iot/ # IoT/嵌入式检测技术 (2)
702
+ app/ # 应用检测技术 (3)
703
+ service/ # 服务探测技术 (5)
704
+ infra/ # 基础设施检测技术 (3)
705
+ correlation/ # 关联引擎 (5)
706
+ identify/ # 识别引擎 (3)
707
+ passive/ # 被动分析 (3)
708
+ osint/ # OSINT 情报富化技术 (6)
709
+ enum/ # 枚举技术 (8)
710
+ meta/ # 元数据工具 (3)
711
+ data/ # 签名数据库和模式库
712
+ jarm-signatures.ts # 已知 JARM 指纹(C2、服务器、CDN)
713
+ waf-signatures.ts # WAF 检测签名
714
+ service-banners.ts # 服务 Banner 模式
715
+ tech-patterns.ts # 技术检测模式
716
+ favicon-hashes.ts # 已知 favicon MurmurHash3 值
717
+ c2-signatures.ts # C2 框架签名
718
+ ... # 15+ 签名/模式数据库
719
+ ```
720
+
721
+ **设计决策:**
722
+
723
+ - **13 个复合工具,103 项技术** &mdash; 智能体调用高级工具(`recon`、`scan_tls`、`scan_http`)。每个复合工具编排多个底层技术并返回关联结果。这减少了工具调用开销,同时保持了粒度。
724
+ - **21 个提供商,1 个服务器** &mdash; 每个指纹识别层都是独立模块。复合编排器根据上下文和深度选择技术。
725
+ - **主动优先,OSINT 可选** &mdash; 80+ 项技术通过直接探测目标工作,无需任何 API 密钥。OSINT 提供商(Shodan、Censys、VirusTotal、SecurityTrails)添加情报富化,但从不是必需的。
726
+ - **按提供商的速率限制器** &mdash; 每个提供商拥有自己的 `RateLimiter` 实例。主动探测有速率限制以避免被检测;OSINT API 根据其配额进行校准。
727
+ - **TTL 缓存** &mdash; DNS 记录(10 分钟)、OSINT 结果(15 分钟)、CT 日志(30 分钟)被缓存,以避免多工具工作流中的冗余查询。
728
+ - **优雅降级** &mdash; 缺少 API 密钥不会导致服务器崩溃。OSINT 工具返回描述性消息:"设置 SHODAN_API_KEY 以启用 Shodan 主机查询。"
729
+ - **3 个依赖** &mdash; `@modelcontextprotocol/sdk`、`zod` 和 `cheerio`。所有网络 I/O 通过原生 `fetch()` 和 Node.js `net`/`tls`/`dns` 模块。没有 nmap,没有外部二进制文件。
730
+
731
+ ---
732
+
733
+ ## 限制
734
+
735
+ - OSINT 工具(Shodan、Censys、VirusTotal、SecurityTrails)需要各自的 API 密钥
736
+ - Censys 免费层限制为每月 250 次查询
737
+ - VirusTotal 免费层限制为每天 500 次查询
738
+ - 端口扫描使用 TCP connect(非 SYN 扫描)&mdash; 比 nmap 隐蔽性低,但不需要 root 权限
739
+ - JARM 指纹识别需要直接 TCP 访问目标(可能被防火墙阻止)
740
+ - UPnP/SSDP 发现仅在本地网络有效
741
+ - 服务探测(MySQL、PostgreSQL、Redis)连接但不进行认证
742
+ - 子域名枚举依赖 CT 日志和被动来源(无暴力破解)
743
+ - macOS / Linux 已测试(Windows 未测试)
744
+
745
+ ---
746
+
747
+ ## MCP 安全套件
748
+
749
+ | 项目 | 领域 | 工具 |
750
+ |------|------|------|
751
+ | [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | 基于浏览器的安全测试 | 39 个工具,Firefox,注入测试 |
752
+ | [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | 云安全(AWS/Azure/GCP) | 38 个工具,60+ 项检查 |
753
+ | [github-security-mcp](https://github.com/badchars/github-security-mcp) | GitHub 安全态势 | 39 个工具,45 项检查 |
754
+ | [cve-mcp](https://github.com/badchars/cve-mcp) | 漏洞情报 | 23 个工具,5 个来源 |
755
+ | [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT 与侦察 | 37 个工具,12 个来源 |
756
+ | [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | 暗网与威胁情报 | 66 个工具,16 个来源 |
757
+ | **fingerprint-mcp** | **通用数字指纹识别** | **13 个工具,103 项技术,21 个提供商** |
758
+
759
+ ---
760
+
761
+ <p align="center">
762
+ <b>仅用于授权的安全测试和评估。</b><br>
763
+ 在对任何目标执行指纹识别之前,请始终确保您已获得适当的授权。
764
+ </p>
765
+
766
+ <p align="center">
767
+ <a href="LICENSE">AGPL-3.0 许可证</a> &bull; 使用 Bun + TypeScript 构建
768
+ </p>