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
@@ -0,0 +1,768 @@
1
+ <p align="center">
2
+ <a href="README.md">English</a> |
3
+ <a href="README.zh.md">简体中文</a> |
4
+ <strong>繁體中文</strong> |
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>