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.es.md ADDED
@@ -0,0 +1,769 @@
1
+ <p align="center">
2
+ <a href="README.md">English</a> |
3
+ <a href="README.zh.md">简体中文</a> |
4
+ <a href="README.zh-TW.md">繁體中文</a> |
5
+ <a href="README.ko.md">한국어</a> |
6
+ <a href="README.de.md">Deutsch</a> |
7
+ <strong>Español</strong> |
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">Huella digital universal para agentes de IA.</h3>
37
+
38
+ <p align="center">
39
+ TCP, TLS/SSL, SSH, HTTP, DNS, WAF/CDN, IoT, SMTP, sondeo de servicios, JARM, JA4X, hash de favicon, topologia de infraestructura, deteccion de C2, enriquecimiento OSINT &mdash; unificados en un unico servidor MCP.<br>
40
+ Tu agente de IA obtiene <b>huella digital de espectro completo bajo demanda</b>, no 11 herramientas CLI desconectadas y correlacion manual.
41
+ </p>
42
+
43
+ <br>
44
+
45
+ <p align="center">
46
+ <a href="#el-problema">El problema</a> &bull;
47
+ <a href="#en-que-se-diferencia">En que se diferencia</a> &bull;
48
+ <a href="#inicio-rapido">Inicio rapido</a> &bull;
49
+ <a href="#que-puede-hacer-la-ia">Que puede hacer la IA</a> &bull;
50
+ <a href="#referencia-de-herramientas-13-herramientas-103-tecnicas">Herramientas (13)</a> &bull;
51
+ <a href="#fuentes-de-datos-21">Fuentes de datos</a> &bull;
52
+ <a href="#arquitectura">Arquitectura</a> &bull;
53
+ <a href="CHANGELOG.md">Registro de cambios</a> &bull;
54
+ <a href="CONTRIBUTING.md">Contribuir</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="Licencia"></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 herramientas">
63
+ <img src="https://img.shields.io/badge/techniques-103-f97316" alt="103 tecnicas">
64
+ </p>
65
+
66
+ <p align="center">
67
+ <img src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/demo.gif" alt="Demo de fingerprint-mcp" width="800">
68
+ </p>
69
+
70
+ ---
71
+
72
+ ## El problema
73
+
74
+ Hacer fingerprinting de un servidor hoy significa manejar una docena de herramientas desconectadas. Ejecutas `nmap` para escaneo de puertos, `testssl.sh` para analisis de certificados, `curl -I` para cabeceras HTTP, `dig` para DNS, `wafw00f` para deteccion de WAF, `ssh-audit` para SSH, una herramienta JARM separada, Wappalyzer para deteccion de tecnologias &mdash; y luego pasas 30 minutos cruzando referencias manualmente en una hoja de calculo para descubrir que esta realmente ejecutandose.
75
+
76
+ ```
77
+ Flujo de trabajo tradicional de fingerprinting:
78
+ analizar certificados TLS -> testssl.sh / openssl s_client
79
+ capturar cabeceras HTTP -> curl -I
80
+ detectar tecnologias web -> wappalyzer CLI
81
+ reconocimiento DNS -> dig / nslookup / dnsenum
82
+ escaneo de puertos -> nmap -sV
83
+ deteccion de WAF -> wafw00f
84
+ auditoria SSH -> ssh-audit
85
+ fingerprinting de servicios -> nmap scripts
86
+ huella JARM -> jarm (herramienta separada)
87
+ consultar bases OSINT -> shodan CLI, censys CLI
88
+ correlacionar todo -> manualmente en una hoja de calculo
89
+ ──────────────────────────────
90
+ Total: 11 herramientas, 30+ minutos, correlacion manual
91
+ ```
92
+
93
+ **fingerprint-mcp** proporciona a tu agente de IA 13 herramientas compuestas que encapsulan 103 tecnicas de fingerprinting de 21 proveedores a traves del [Model Context Protocol](https://modelcontextprotocol.io). El agente ejecuta fingerprinting multicapa en paralelo, correlaciona senales entre capas TCP/TLS/HTTP/DNS/SSH, detecta honeypots e infraestructura C2, y presenta una imagen de inteligencia unificada &mdash; todo en una sola conversacion.
94
+
95
+ ```
96
+ Con fingerprint-mcp:
97
+ Tu: "Haz un reconocimiento profundo de target.com"
98
+
99
+ Agente: -> recon {url: "https://target.com", depth: "deep"}
100
+
101
+ -> TLS: nginx/1.24.0 via JARM (3fd21b20d00000...),
102
+ certificado Let's Encrypt, 2 SANs, TLS 1.2+1.3
103
+ -> HTTP: Express.js detras de Cloudflare WAF,
104
+ React SPA, Google Analytics, 14 cabeceras de seguridad analizadas
105
+ -> DNS: registros A/AAAA/MX/TXT, SPF/DKIM/DMARC configurados,
106
+ Slack + Google Workspace detectados via CNAME/MX
107
+ -> Puertos: 80, 443, 22 (OpenSSH 9.6), 8080 (servidor de desarrollo)
108
+ -> WAF: Cloudflare detectado, IP de origen descubierta via conexion directa
109
+ -> Enumeracion: 12 subdominios via registros CT, DNS comodin detectado
110
+ -> "target.com ejecuta nginx/1.24.0 con Express.js detras de
111
+ Cloudflare WAF. La IP de origen 203.0.113.42 esta expuesta en
112
+ el puerto 8080. TLS esta correctamente configurado (equivalente A+),
113
+ pero el servidor de desarrollo en 8080 no tiene proteccion WAF.
114
+ 3 subdominios apuntan a infraestructura desmantelada —
115
+ riesgo potencial de apropiacion."
116
+ ```
117
+
118
+ ---
119
+
120
+ ## En que se diferencia
121
+
122
+ Las herramientas existentes te dan datos sin procesar una capa a la vez. fingerprint-mcp le da a tu agente de IA la capacidad de **razonar simultaneamente a traves de todas las capas de fingerprinting**.
123
+
124
+ <table>
125
+ <thead>
126
+ <tr>
127
+ <th></th>
128
+ <th>Enfoque tradicional</th>
129
+ <th>fingerprint-mcp</th>
130
+ </tr>
131
+ </thead>
132
+ <tbody>
133
+ <tr>
134
+ <td><b>Interfaz</b></td>
135
+ <td>11 herramientas CLI diferentes con formatos de salida distintos</td>
136
+ <td>MCP &mdash; agente de IA llama herramientas conversacionalmente</td>
137
+ </tr>
138
+ <tr>
139
+ <td><b>Tecnicas</b></td>
140
+ <td>Una herramienta, una capa a la vez</td>
141
+ <td>103 tecnicas de 21 proveedores, ejecutadas en paralelo</td>
142
+ </tr>
143
+ <tr>
144
+ <td><b>Analisis TLS</b></td>
145
+ <td>Salida de testssl.sh, analizar JARM por separado manualmente</td>
146
+ <td>El agente combina certificado + JARM + JA4X + suites de cifrado + SNI + registros CT en una llamada</td>
147
+ </tr>
148
+ <tr>
149
+ <td><b>Correlacion</b></td>
150
+ <td>Copiar y pegar resultados en una hoja de calculo</td>
151
+ <td>El agente correlaciona: "JARM coincide con framework C2 conocido, timing HTTP confirma honeypot"</td>
152
+ </tr>
153
+ <tr>
154
+ <td><b>Evasion de WAF</b></td>
155
+ <td>wafw00f detecta WAF, buscas el origen manualmente</td>
156
+ <td>El agente detecta WAF, descubre la IP de origen y verifica que sirve el mismo contenido</td>
157
+ </tr>
158
+ <tr>
159
+ <td><b>Claves API</b></td>
160
+ <td>Requeridas para Shodan, Censys, etc.</td>
161
+ <td>80+ tecnicas activas funcionan sin claves API; las claves desbloquean enriquecimiento OSINT</td>
162
+ </tr>
163
+ <tr>
164
+ <td><b>Configuracion</b></td>
165
+ <td>Instalar nmap, testssl, wafw00f, ssh-audit, jarm, wappalyzer...</td>
166
+ <td><code>npx fingerprint-mcp</code> &mdash; un comando, cero configuracion</td>
167
+ </tr>
168
+ </tbody>
169
+ </table>
170
+
171
+ ---
172
+
173
+ ## Inicio rapido
174
+
175
+ ### Opcion 1: npx (sin instalacion)
176
+
177
+ ```bash
178
+ npx fingerprint-mcp
179
+ ```
180
+
181
+ Las 80+ tecnicas activas de fingerprinting funcionan inmediatamente. No se requieren claves API para TCP, TLS, SSH, HTTP, DNS, WAF, rutas, servicios, temporizado, IoT, SMTP, infraestructura y fingerprinting de aplicaciones.
182
+
183
+ ### Opcion 2: Clonar
184
+
185
+ ```bash
186
+ git clone https://github.com/badchars/fingerprint-mcp.git
187
+ cd fingerprint-mcp
188
+ bun install
189
+ ```
190
+
191
+ ### Variables de entorno (opcionales)
192
+
193
+ ```bash
194
+ # Enriquecimiento OSINT (todas opcionales — el fingerprinting activo funciona sin claves)
195
+ export SHODAN_API_KEY=your-key # Habilita osint_shodan, ssh_hostkey_lookup
196
+ export CENSYS_API_ID=your-id # Habilita osint_censys (gratuito: 250 consultas/mes)
197
+ export CENSYS_API_SECRET=your-secret # Secreto de API de Censys
198
+ export SECURITYTRAILS_API_KEY=your-key # Habilita waf_origin, enum_passive_dns
199
+ export VIRUSTOTAL_API_KEY=your-key # Habilita osint_virustotal (gratuito: 500 consultas/dia)
200
+ ```
201
+
202
+ Todas las claves API son opcionales. Sin ellas, sigues teniendo TCP/TLS/SSH/HTTP/DNS/WAF/rutas/servicios/temporizado/IoT/SMTP/infraestructura/aplicaciones, correlacion, analisis pasivo, enumeracion y herramientas meta completas &mdash; 80+ tecnicas que funcionan sondeando directamente el objetivo.
203
+
204
+ ### Conectar con tu agente de IA
205
+
206
+ <details open>
207
+ <summary><b>Claude Code</b></summary>
208
+
209
+ ```bash
210
+ # Con npx
211
+ claude mcp add fingerprint-mcp -- npx fingerprint-mcp
212
+
213
+ # Con clon local
214
+ claude mcp add fingerprint-mcp -- bun run /path/to/fingerprint-mcp/src/index.ts
215
+ ```
216
+
217
+ </details>
218
+
219
+ <details>
220
+ <summary><b>Claude Desktop</b></summary>
221
+
222
+ Agregar a `~/Library/Application Support/Claude/claude_desktop_config.json`:
223
+
224
+ ```json
225
+ {
226
+ "mcpServers": {
227
+ "fingerprint": {
228
+ "command": "npx",
229
+ "args": ["-y", "fingerprint-mcp"],
230
+ "env": {
231
+ "SHODAN_API_KEY": "optional",
232
+ "CENSYS_API_ID": "optional",
233
+ "CENSYS_API_SECRET": "optional",
234
+ "SECURITYTRAILS_API_KEY": "optional",
235
+ "VIRUSTOTAL_API_KEY": "optional"
236
+ }
237
+ }
238
+ }
239
+ }
240
+ ```
241
+
242
+ </details>
243
+
244
+ <details>
245
+ <summary><b>Cursor / Windsurf / otros clientes MCP</b></summary>
246
+
247
+ El mismo formato de configuracion JSON. Apunta el comando a `npx fingerprint-mcp` o a tu ruta de instalacion local.
248
+
249
+ </details>
250
+
251
+ ### Empezar a consultar
252
+
253
+ ```
254
+ Tu: "Haz fingerprinting de todo en target.com — TLS, stack HTTP, WAF, DNS, puertos abiertos"
255
+ ```
256
+
257
+ Eso es todo. El agente maneja automaticamente el fingerprinting multicapa, la correlacion de senales y el analisis de infraestructura.
258
+
259
+ ---
260
+
261
+ ## Que puede hacer la IA
262
+
263
+ ### Reconocimiento rapido
264
+
265
+ ```
266
+ Tu: "Reconocimiento rapido de target.com"
267
+
268
+ Agente: -> recon {url: "https://target.com", depth: "quick"}
269
+
270
+ -> TCP: puertos 80, 443, 22 abiertos
271
+ -> TLS: certificado RSA Let's Encrypt, TLS 1.2+1.3, firma JARM de nginx
272
+ -> HTTP: nginx/1.24.0, Express.js, React, Cloudflare CDN
273
+ -> DNS: A 203.0.113.42, MX Google Workspace, SPF/DKIM configurados
274
+ -> WAF: Cloudflare detectado (cabecera cf-ray)
275
+ -> "target.com es una SPA React sobre Express.js detras de nginx/1.24.0,
276
+ servida a traves de Cloudflare CDN. TLS correctamente configurado con
277
+ Let's Encrypt. SSH en puerto 22 ejecutando OpenSSH 9.6. Correo
278
+ manejado por Google Workspace con SPF/DKIM/DMARC completo."
279
+ ```
280
+
281
+ ### Investigacion profunda de TLS
282
+
283
+ ```
284
+ Tu: "Analiza la configuracion TLS de suspicious-server.com en detalle"
285
+
286
+ Agente: -> scan_tls {host: "suspicious-server.com"}
287
+
288
+ -> Certificado: autofirmado, CN=localhost, expirado hace 47 dias
289
+ -> JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
290
+ (coincide con perfil predeterminado de Cobalt Strike)
291
+ -> JA4X: huella coincide con patron de framework C2 conocido
292
+ -> Suites de cifrado: acepta cifrados debiles (RC4, 3DES)
293
+ -> SNI: responde identicamente a cualquier valor SNI
294
+ -> Registros CT: certificado no registrado (no confiable publicamente)
295
+ -> "ALTO RIESGO: La configuracion TLS indica fuertemente infraestructura C2.
296
+ Certificado autofirmado expirado, huella JARM coincide con Cobalt Strike,
297
+ acepta cifrados debiles y responde a valores SNI arbitrarios.
298
+ Se recomienda investigacion inmediata y bloqueo."
299
+ ```
300
+
301
+ ### Evasion de WAF y descubrimiento de origen
302
+
303
+ ```
304
+ Tu: "target.com esta detras de un WAF. Puedes encontrar el servidor de origen?"
305
+
306
+ Agente: -> scan_waf {url: "https://target.com"}
307
+ -> scan_dns {domain: "target.com"}
308
+ -> enumerate {domain: "target.com"}
309
+
310
+ -> WAF: Cloudflare (AS13335), pagina de desafio en solicitudes sospechosas
311
+ -> DNS: registro A apunta a IP de Cloudflare 104.21.x.x
312
+ -> Subdominios: dev.target.com resuelve a 203.0.113.42 (no Cloudflare)
313
+ -> Conexion directa a 203.0.113.42:443 devuelve el mismo certificado TLS
314
+ -> Historico SecurityTrails: origen era 203.0.113.42 antes de Cloudflare
315
+ -> "IP de origen encontrada: 203.0.113.42. Descubierta via subdominio
316
+ dev.target.com que evita Cloudflare. El origen sirve el mismo
317
+ certificado TLS y responde a la cabecera Host de target.com.
318
+ El origen no tiene proteccion WAF — acceso directo posible."
319
+ ```
320
+
321
+ ### Descubrimiento de servicios en un host
322
+
323
+ ```
324
+ Tu: "Que servicios estan ejecutandose en 10.0.1.50?"
325
+
326
+ Agente: -> scan_ports {host: "10.0.1.50"}
327
+ -> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
328
+
329
+ -> Puerto 22: OpenSSH 8.9p1 Ubuntu, clave de host ED25519
330
+ -> Puerto 80: Apache/2.4.57, PHP/8.2, WordPress 6.4
331
+ -> Puerto 3306: MySQL 8.0.36, autenticacion requerida
332
+ -> Puerto 5432: PostgreSQL 16.1, SSL requerido
333
+ -> Puerto 6379: Redis 7.2.4, SIN autenticacion (abierto)
334
+ -> Puerto 8080: servidor de desarrollo Node.js Express, CORS: *
335
+ -> "CRITICO: Redis en puerto 6379 no tiene autenticacion — cualquiera
336
+ en la red puede leer/escribir datos. El servidor de desarrollo Express
337
+ en 8080 tiene CORS comodin. MySQL y PostgreSQL requieren correctamente
338
+ autenticacion. WordPress esta 2 versiones menores atrasado.
339
+ Accion inmediata necesaria en Redis y la exposicion del servidor
340
+ de desarrollo."
341
+ ```
342
+
343
+ ---
344
+
345
+ ## Referencia de herramientas (13 herramientas, 103 tecnicas)
346
+
347
+ <details open>
348
+ <summary><b>recon &mdash; Reconocimiento completo con seleccion de tecnicas basada en profundidad</b></summary>
349
+
350
+ | Parametro | Tipo | Descripcion |
351
+ |-----------|------|-------------|
352
+ | `url` | string | URL objetivo para fingerprinting |
353
+ | `depth` | `quick` \| `standard` \| `deep` | Profundidad de escaneo: quick=5 tecnicas, standard=20, deep=50+ |
354
+
355
+ Orquesta tecnicas de todos los proveedores basandose en el nivel de profundidad. El modo rapido da una vision general rapida; el modo profundo ejecuta fingerprinting exhaustivo incluyendo enumeracion, OSINT y correlacion.
356
+
357
+ </details>
358
+
359
+ <details>
360
+ <summary><b>scan_ports &mdash; Escaneo de puertos TCP con deteccion de servicios (3 tecnicas)</b></summary>
361
+
362
+ | Parametro | Tipo | Descripcion |
363
+ |-----------|------|-------------|
364
+ | `host` | string | Host objetivo (IP o dominio) |
365
+ | `ports` | number[] | Opcional &mdash; puertos especificos a escanear (predeterminado: puertos comunes) |
366
+
367
+ | Tecnica | Descripcion |
368
+ |---------|-------------|
369
+ | `tcp_probe` | Escaneo de conexion TCP para detectar puertos abiertos |
370
+ | `tcp_banner` | Captura de banner en puertos abiertos para identificacion de servicios |
371
+ | `tcp_analysis` | Analisis de combinacion de puertos e inferencia de servicios |
372
+
373
+ </details>
374
+
375
+ <details>
376
+ <summary><b>scan_tls &mdash; Analisis completo de TLS/SSL (8 tecnicas)</b></summary>
377
+
378
+ | Parametro | Tipo | Descripcion |
379
+ |-----------|------|-------------|
380
+ | `host` | string | Host objetivo (IP o dominio) |
381
+ | `port` | number | Opcional &mdash; puerto TLS (predeterminado: 443) |
382
+
383
+ | Tecnica | Descripcion |
384
+ |---------|-------------|
385
+ | `tls_certificate` | Analisis de certificado X.509 &mdash; sujeto, emisor, SANs, validez, cadena |
386
+ | `tls_jarm` | Fingerprinting activo JARM &mdash; 10 sondas TLS Client Hello, hash de 62 caracteres |
387
+ | `tls_ja4x` | Fingerprinting pasivo TLS JA4X a partir de propiedades del certificado |
388
+ | `tls_ciphers` | Enumeracion de suites de cifrado y analisis de fortaleza |
389
+ | `tls_protocols` | Deteccion de versiones de protocolo TLS soportadas (SSLv3 hasta TLS 1.3) |
390
+ | `tls_sni` | Prueba de comportamiento SNI &mdash; certificado predeterminado vs. nombre de host solicitado |
391
+ | `tls_ct_logs` | Consulta de registros de Certificate Transparency via crt.sh |
392
+ | `tls_ocsp` | Grapado OCSP y verificacion de estado de revocacion |
393
+
394
+ </details>
395
+
396
+ <details>
397
+ <summary><b>scan_dns &mdash; Inteligencia DNS (7 tecnicas)</b></summary>
398
+
399
+ | Parametro | Tipo | Descripcion |
400
+ |-----------|------|-------------|
401
+ | `domain` | string | Dominio objetivo |
402
+
403
+ | Tecnica | Descripcion |
404
+ |---------|-------------|
405
+ | `dns_records` | Enumeracion completa de registros &mdash; A, AAAA, MX, NS, TXT, CNAME, SOA |
406
+ | `dns_email_auth` | Analisis de registros SPF, DKIM y DMARC |
407
+ | `dns_saas` | Deteccion de SaaS/servicios via patrones CNAME y MX (Slack, Zendesk, etc.) |
408
+ | `dns_server` | Fingerprinting de servidor DNS (BIND, PowerDNS, Cloudflare, etc.) |
409
+ | `dns_takeover` | Deteccion de apropiacion de subdominio via analisis de CNAME colgante |
410
+ | `dns_zone` | Intento de transferencia de zona (AXFR) |
411
+ | `dns_caa` | Analisis de registro CAA para restricciones de autoridad de certificacion |
412
+
413
+ </details>
414
+
415
+ <details>
416
+ <summary><b>scan_http &mdash; Fingerprinting HTTP/web (29 tecnicas)</b></summary>
417
+
418
+ | Parametro | Tipo | Descripcion |
419
+ |-----------|------|-------------|
420
+ | `url` | string | URL objetivo |
421
+
422
+ | Tecnica | Proveedor | Descripcion |
423
+ |---------|-----------|-------------|
424
+ | `http_headers` | HTTP | Analisis de cabeceras de respuesta e identificacion de servidor |
425
+ | `http_header_order` | HTTP | Huella de orden de cabeceras (firma de software del servidor) |
426
+ | `http_security_headers` | HTTP | Auditoria de cabeceras de seguridad (CSP, HSTS, X-Frame-Options, etc.) |
427
+ | `http_cookies` | HTTP | Analisis de cookies &mdash; flags, prefijos, deteccion de framework |
428
+ | `http_methods` | HTTP | Enumeracion de metodos HTTP permitidos (OPTIONS) |
429
+ | `http_cors` | HTTP | Analisis de politica CORS y deteccion de mala configuracion |
430
+ | `http_compression` | HTTP | Algoritmos de compresion soportados (gzip, br, zstd) |
431
+ | `http_caching` | HTTP | Analisis de cabeceras de cache (deteccion de CDN, proxy inverso) |
432
+ | `http_etag` | HTTP | Analisis de formato ETag para identificacion de backend |
433
+ | `http_error` | HTTP | Fingerprinting de paginas de error (personalizadas vs. predeterminadas) |
434
+ | `http_redirect` | HTTP | Analisis de cadena de redireccion |
435
+ | `http_timing` | HTTP | Linea base de temporizado de respuesta para perfilado de rendimiento |
436
+ | `http_favicon` | HTTP | Hash de favicon (MurmurHash3) para identificacion de tecnologia |
437
+ | `http_robots` | HTTP | Analisis de robots.txt y extraccion de rutas prohibidas |
438
+ | `http_sitemap` | HTTP | Descubrimiento de sitemap y extraccion de URLs |
439
+ | `http_wellknown` | HTTP | Descubrimiento de endpoints .well-known (security.txt, openid, etc.) |
440
+ | `web_tech` | Web | Deteccion de tecnologia via patrones HTML/JS/CSS |
441
+ | `web_analytics` | Web | Deteccion de servicios de analitica y seguimiento |
442
+ | `web_sourcemaps` | Web | Descubrimiento de archivos source map |
443
+ | `web_websocket` | Web | Deteccion de endpoints WebSocket |
444
+ | `web_graphql` | Web | Deteccion de endpoints GraphQL e introspeccion |
445
+ | `web_spa` | Web | Deteccion de frameworks de aplicacion de pagina unica |
446
+ | `web_cdn` | Web | Deteccion de CDN via cabeceras de respuesta y DNS |
447
+ | `web_meta` | Web | Analisis de meta tags HTML (generador, pistas de framework) |
448
+ | `web_feed` | Web | Descubrimiento de feeds RSS/Atom |
449
+ | `h2_detect` | HTTP/2 | Deteccion de soporte de protocolo HTTP/2 |
450
+ | `h2_fingerprint` | HTTP/2 | Fingerprinting de servidor HTTP/2 (SETTINGS, WINDOW_UPDATE) |
451
+ | `h2_h3` | HTTP/2 | Deteccion de soporte HTTP/3 (QUIC) via cabecera Alt-Svc |
452
+ | `app_cms` | Application | Deteccion de CMS (WordPress, Drupal, Joomla, etc.) |
453
+
454
+ </details>
455
+
456
+ <details>
457
+ <summary><b>scan_paths &mdash; Inteligencia de rutas (5 tecnicas)</b></summary>
458
+
459
+ | Parametro | Tipo | Descripcion |
460
+ |-----------|------|-------------|
461
+ | `url` | string | URL objetivo |
462
+ | `categories` | string[] | Opcional &mdash; categorias a verificar (sensitive, git, debug, api, config) |
463
+
464
+ | Tecnica | Descripcion |
465
+ |---------|-------------|
466
+ | `path_sensitive` | Descubrimiento de archivos sensibles (backups, archivos de configuracion, volcados de base de datos) |
467
+ | `path_robots` | Analisis de robots.txt y sitemap.xml para descubrir rutas ocultas |
468
+ | `path_git` | Deteccion de fugas de repositorio Git (.git/HEAD, .git/config) |
469
+ | `path_debug` | Descubrimiento de endpoints de depuracion (phpinfo, server-status, consolas de depuracion) |
470
+ | `path_api` | Descubrimiento de versiones de API y endpoints de documentacion |
471
+
472
+ </details>
473
+
474
+ <details>
475
+ <summary><b>scan_waf &mdash; Deteccion y fingerprinting de WAF/CDN (4 tecnicas)</b></summary>
476
+
477
+ | Parametro | Tipo | Descripcion |
478
+ |-----------|------|-------------|
479
+ | `url` | string | URL objetivo |
480
+
481
+ | Tecnica | Descripcion |
482
+ |---------|-------------|
483
+ | `waf_detect` | Deteccion de presencia de WAF via analisis de cabeceras de respuesta y comportamiento |
484
+ | `waf_cdn` | Identificacion de proveedor CDN (Cloudflare, Akamai, Fastly, etc.) |
485
+ | `waf_fingerprint` | Identificacion de producto WAF y deteccion de version |
486
+ | `waf_origin` | Descubrimiento de IP de origen detras de WAF/CDN (requiere `SECURITYTRAILS_API_KEY`) |
487
+
488
+ </details>
489
+
490
+ <details>
491
+ <summary><b>scan_services &mdash; Sondeo a nivel de servicio (12 tecnicas)</b></summary>
492
+
493
+ | Parametro | Tipo | Descripcion |
494
+ |-----------|------|-------------|
495
+ | `host` | string | Host objetivo (IP o dominio) |
496
+ | `ports` | number[] | Opcional &mdash; puertos especificos a sondear |
497
+ | `service` | string | Opcional &mdash; servicio especifico a sondear (mysql, postgres, redis, ftp, ssh, smtp, vnc, iot) |
498
+
499
+ | Tecnica | Proveedor | Descripcion |
500
+ |---------|-----------|-------------|
501
+ | `ssh_probe` | SSH | Deteccion de version de protocolo SSH y software |
502
+ | `ssh_algorithms` | SSH | Auditoria de algoritmos SSH (KEX, cifrados, MACs, tipos de clave de host) |
503
+ | `ssh_hostkey_lookup` | SSH | Busqueda de clave de host SSH via Shodan (requiere `SHODAN_API_KEY`) |
504
+ | `svc_mysql` | Service | Deteccion de version MySQL y fingerprinting de capacidades |
505
+ | `svc_postgres` | Service | Deteccion de version PostgreSQL y verificacion de soporte SSL |
506
+ | `svc_redis` | Service | Deteccion de version Redis y estado de autenticacion |
507
+ | `svc_ftp` | Service | Analisis de banner FTP y verificacion de inicio de sesion anonimo |
508
+ | `svc_vnc_rdp` | Service | Deteccion de servicio VNC/RDP y evaluacion de seguridad |
509
+ | `smtp_banner` | SMTP | Analisis de banner SMTP e identificacion de MTA |
510
+ | `smtp_starttls` | SMTP | Soporte SMTP STARTTLS e inspeccion de certificado |
511
+ | `iot_detect` | IoT | Deteccion de dispositivos IoT via patrones de banner y paginas predeterminadas |
512
+ | `iot_upnp` | IoT | Descubrimiento de dispositivos UPnP/SSDP en red local |
513
+
514
+ </details>
515
+
516
+ <details>
517
+ <summary><b>enumerate &mdash; Expansion de alcance (8 tecnicas)</b></summary>
518
+
519
+ | Parametro | Tipo | Descripcion |
520
+ |-----------|------|-------------|
521
+ | `domain` | string | Dominio objetivo |
522
+
523
+ | Tecnica | Descripcion |
524
+ |---------|-------------|
525
+ | `enum_subdomains` | Enumeracion de subdominios via multiples metodos |
526
+ | `enum_wildcard` | Deteccion de DNS comodin |
527
+ | `enum_tld` | Expansion de TLD (target.com -> target.net, target.org, etc.) |
528
+ | `enum_related` | Descubrimiento de dominios relacionados via infraestructura compartida |
529
+ | `enum_asn` | Descubrimiento de vecinos ASN &mdash; otros dominios en la misma red |
530
+ | `enum_ct` | Extraccion de subdominios de registros Certificate Transparency |
531
+ | `enum_passive_dns` | Historial DNS pasivo (requiere `SECURITYTRAILS_API_KEY`) |
532
+ | `enum_scope` | Resumen de alcance y vision general de superficie de ataque |
533
+
534
+ </details>
535
+
536
+ <details>
537
+ <summary><b>osint &mdash; Enriquecimiento OSINT (6 tecnicas)</b></summary>
538
+
539
+ | Parametro | Tipo | Descripcion |
540
+ |-----------|------|-------------|
541
+ | `target` | string | Direccion IP o dominio a enriquecer |
542
+ | `type` | `ip` \| `domain` | Opcional &mdash; tipo de objetivo (autodetectado si se omite) |
543
+
544
+ | Tecnica | Auth | Descripcion |
545
+ |---------|------|-------------|
546
+ | `osint_shodan` | `SHODAN_API_KEY` | Consulta de host Shodan &mdash; puertos abiertos, banners, vulnerabilidades, SO |
547
+ | `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Datos de host Censys &mdash; servicios, TLS, sistema autonomo |
548
+ | `osint_reverse_ip` | Ninguna | Busqueda IP inversa &mdash; otros dominios en la misma IP |
549
+ | `osint_whois` | Ninguna | Datos de registro WHOIS &mdash; registrador, fechas, servidores de nombres |
550
+ | `osint_webarchive` | Ninguna | Historial Web Archive &mdash; primer/ultimo snapshot, frecuencia de cambio |
551
+ | `osint_virustotal` | `VIRUSTOTAL_API_KEY` | Informe VirusTotal de dominio/IP &mdash; detecciones, categorias, DNS |
552
+
553
+ </details>
554
+
555
+ <details>
556
+ <summary><b>analyze &mdash; Analisis pasivo de huellas (3 modos)</b></summary>
557
+
558
+ | Parametro | Tipo | Descripcion |
559
+ |-----------|------|-------------|
560
+ | `type` | `headers` \| `html` \| `banner` | Tipo de datos a analizar |
561
+ | `data` | string | Datos sin procesar a analizar (pegar cabeceras, HTML o salida de banner) |
562
+
563
+ | Modo | Descripcion |
564
+ |------|-------------|
565
+ | `fp_analyze_headers` | Analisis pasivo de cabeceras HTTP &mdash; deteccion de servidor, framework, proxy sin enviar trafico |
566
+ | `fp_analyze_html` | Analisis pasivo de HTML &mdash; deteccion de tecnologia, identificacion de framework del codigo fuente |
567
+ | `fp_analyze_banner` | Analisis pasivo de banner &mdash; identificacion de servicio a partir de texto de banner sin procesar |
568
+
569
+ </details>
570
+
571
+ <details>
572
+ <summary><b>correlate &mdash; Motor de correlacion multi-senal (7 modos)</b></summary>
573
+
574
+ | Parametro | Tipo | Descripcion |
575
+ |-----------|------|-------------|
576
+ | `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | Modo de correlacion |
577
+ | `signals` | object | Senales de huella a correlacionar (varia segun el modo) |
578
+
579
+ | Modo | Descripcion |
580
+ |------|-------------|
581
+ | `fp_consistency` | Verificacion de consistencia de senales entre capas &mdash; coinciden las huellas TCP, TLS, HTTP y DNS? |
582
+ | `fp_honeypot` | Deteccion de honeypot &mdash; verifica combinaciones de servicios imposibles y anomalias de comportamiento |
583
+ | `fp_spoofing` | Deteccion de suplantacion &mdash; identifica discrepancias entre cabeceras de servidor y comportamiento real |
584
+ | `fp_compare` | Comparacion lado a lado de perfiles de huellas de dos hosts |
585
+ | `fp_topology` | Mapeo de topologia de infraestructura &mdash; CDN, balanceador de carga, cadena de proxy inverso |
586
+ | `fp_c2` | Deteccion de framework C2 via correlacion JARM, TLS, HTTP y temporizado |
587
+ | `fp_identify` | Identificacion basada en hash contra base de datos de firmas conocidas |
588
+
589
+ </details>
590
+
591
+ <details>
592
+ <summary><b>meta &mdash; Configuracion y datos del servidor (3 modos)</b></summary>
593
+
594
+ | Parametro | Tipo | Descripcion |
595
+ |-----------|------|-------------|
596
+ | `category` | string | Opcional &mdash; filtrar por categoria |
597
+
598
+ | Modo | Descripcion |
599
+ |------|-------------|
600
+ | `fp_sources` | Listar todas las fuentes de datos disponibles con configuracion y estado de claves API |
601
+ | `fp_config` | Configuracion del servidor &mdash; version, proveedores cargados, conteo de tecnicas |
602
+ | `fp_signatures` | Listado de base de datos de firmas &mdash; firmas JARM, banner, WAF, aplicacion |
603
+
604
+ </details>
605
+
606
+ ---
607
+
608
+ ### Uso de CLI
609
+
610
+ ```bash
611
+ # Listar todas las herramientas y tecnicas disponibles
612
+ npx fingerprint-mcp --list
613
+
614
+ # Ejecutar cualquier herramienta directamente
615
+ npx fingerprint-mcp --tool recon '{"url":"https://example.com","depth":"quick"}'
616
+ npx fingerprint-mcp --tool scan_tls '{"host":"example.com"}'
617
+ npx fingerprint-mcp --tool scan_ports '{"host":"10.0.1.50","ports":[22,80,443,3306,8080]}'
618
+ npx fingerprint-mcp --tool scan_dns '{"domain":"example.com"}'
619
+ npx fingerprint-mcp --tool scan_http '{"url":"https://example.com"}'
620
+ npx fingerprint-mcp --tool scan_waf '{"url":"https://example.com"}'
621
+ npx fingerprint-mcp --tool scan_services '{"host":"10.0.1.50","service":"redis"}'
622
+ npx fingerprint-mcp --tool enumerate '{"domain":"example.com"}'
623
+ npx fingerprint-mcp --tool analyze '{"type":"headers","data":"Server: nginx/1.24.0\nX-Powered-By: Express"}'
624
+ npx fingerprint-mcp --tool correlate '{"type":"honeypot","signals":{"jarm":"...","banner":"..."}}'
625
+ npx fingerprint-mcp --tool meta '{}'
626
+
627
+ # Herramientas OSINT (requieren claves API)
628
+ SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
629
+ ```
630
+
631
+ ---
632
+
633
+ ## Fuentes de datos (21)
634
+
635
+ | Fuente | Auth | Que proporciona |
636
+ |--------|------|-----------------|
637
+ | Sondeo TCP | Ninguna | Escaneo de puertos, captura de banner, deteccion de servicios |
638
+ | Analisis TLS/SSL | Ninguna | Analisis de certificados, fingerprinting JARM, JA4X, enumeracion de cifrados, pruebas SNI |
639
+ | Sondeo SSH | Ninguna | Version de protocolo, auditoria de algoritmos, deteccion de software |
640
+ | Analisis HTTP | Ninguna | Fingerprinting de cabeceras, hash de favicon, analisis de cookies, enumeracion de metodos, CORS |
641
+ | Deteccion web | Ninguna | Deteccion de tecnologia, analitica, source maps, WebSocket, GraphQL, frameworks SPA |
642
+ | Descubrimiento de rutas | Ninguna | Archivos sensibles, fugas Git, endpoints de depuracion, versiones de API, robots.txt |
643
+ | Resolucion DNS | Ninguna | Enumeracion de registros, analisis de autenticacion de email, deteccion SaaS, fingerprinting de servidor |
644
+ | Deteccion WAF/CDN | Ninguna | Identificacion de WAF, deteccion de CDN, fingerprinting de WAF |
645
+ | Analisis de temporizado | Ninguna | Linea base de temporizado de respuesta, deteccion de desviacion de reloj |
646
+ | HTTP/2 & HTTP/3 | Ninguna | Deteccion y fingerprinting HTTP/2, descubrimiento HTTP/3 Alt-Svc |
647
+ | Sondeo SMTP | Ninguna | Analisis de banner SMTP, inspeccion STARTTLS |
648
+ | IoT/Embebido | Ninguna | Deteccion de dispositivos IoT, descubrimiento UPnP/SSDP |
649
+ | Deteccion de aplicaciones | Ninguna | Identificacion de CMS, framework y plataforma de comercio electronico |
650
+ | Sondeo de servicios | Ninguna | Fingerprinting de MySQL, PostgreSQL, Redis, FTP, VNC/RDP |
651
+ | Deteccion de infraestructura | Ninguna | Identificacion de proveedor cloud, proveedor de hosting, CDN |
652
+ | Motor de correlacion | Ninguna | Consistencia de senales, deteccion de honeypot, deteccion de suplantacion, mapeo de topologia |
653
+ | Motor de identificacion | Ninguna | Identificacion basada en hash, deteccion C2, coincidencia de firmas |
654
+ | [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | Inteligencia de host &mdash; puertos abiertos, banners, vulnerabilidades, deteccion de SO |
655
+ | [Censys](https://censys.io) | `CENSYS_API_ID` | Datos de host &mdash; servicios, certificados TLS, informacion de sistema autonomo |
656
+ | [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | Descubrimiento de origen WAF, historial DNS pasivo, registros historicos |
657
+ | [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | Reputacion de dominio/IP, resultados de deteccion, historial DNS, categorias |
658
+
659
+ ---
660
+
661
+ ## Arquitectura
662
+
663
+ ```
664
+ src/
665
+ index.ts # Punto de entrada CLI (--help, --list, --tool, servidor stdio)
666
+ protocol/
667
+ mcp-server.ts # Configuracion del servidor MCP (transporte stdio)
668
+ tools.ts # Registro de herramientas — las 13 herramientas compuestas registradas aqui
669
+ types/
670
+ index.ts # Tipos compartidos (ToolDef, ToolContext, ToolResult)
671
+ utils/
672
+ rate-limiter.ts # Limitador de tasa por proveedor
673
+ cache.ts # Cache TTL para respuestas API
674
+ require-key.ts # Helper de validacion de clave API
675
+ murmurhash3.ts # MurmurHash3 para hash de favicon
676
+ composite/ # 13 orquestadores de herramientas compuestas
677
+ recon.ts # Orquestador de reconocimiento completo (quick/standard/deep)
678
+ scan-ports.ts # Compuesto de escaneo de puertos
679
+ scan-tls.ts # Compuesto de analisis TLS
680
+ scan-dns.ts # Compuesto de inteligencia DNS
681
+ scan-http.ts # Compuesto de fingerprinting HTTP
682
+ scan-paths.ts # Compuesto de descubrimiento de rutas
683
+ scan-waf.ts # Compuesto de deteccion WAF/CDN
684
+ scan-services.ts # Compuesto de sondeo de servicios
685
+ analyze.ts # Compuesto de analisis pasivo
686
+ correlate.ts # Compuesto de motor de correlacion
687
+ enumerate.ts # Compuesto de expansion de alcance
688
+ osint.ts # Compuesto de enriquecimiento OSINT
689
+ meta.ts # Compuesto de meta del servidor
690
+ helpers.ts # Helpers compartidos de compuestos
691
+ tcp/ # Tecnicas de sondeo TCP (3)
692
+ tls/ # Tecnicas de analisis TLS/SSL (8)
693
+ ssh/ # Tecnicas de sondeo SSH (3)
694
+ http/ # Tecnicas de fingerprinting HTTP (16)
695
+ web/ # Tecnicas de deteccion de tecnologia web (9)
696
+ path/ # Tecnicas de descubrimiento de rutas (5)
697
+ dns/ # Tecnicas de inteligencia DNS (7)
698
+ waf/ # Tecnicas de deteccion WAF/CDN (4)
699
+ timing/ # Tecnicas de analisis de temporizado (2)
700
+ h2/ # Tecnicas HTTP/2 & HTTP/3 (3)
701
+ smtp/ # Tecnicas de sondeo SMTP (2)
702
+ iot/ # Tecnicas de deteccion IoT/embebido (2)
703
+ app/ # Tecnicas de deteccion de aplicaciones (3)
704
+ service/ # Tecnicas de sondeo de servicios (5)
705
+ infra/ # Tecnicas de deteccion de infraestructura (3)
706
+ correlation/ # Motor de correlacion (5)
707
+ identify/ # Motor de identificacion (3)
708
+ passive/ # Analisis pasivo (3)
709
+ osint/ # Tecnicas de enriquecimiento OSINT (6)
710
+ enum/ # Tecnicas de enumeracion (8)
711
+ meta/ # Herramientas meta (3)
712
+ data/ # Bases de datos de firmas y bibliotecas de patrones
713
+ jarm-signatures.ts # Huellas JARM conocidas (C2, servidores, CDNs)
714
+ waf-signatures.ts # Firmas de deteccion WAF
715
+ service-banners.ts # Patrones de banner de servicios
716
+ tech-patterns.ts # Patrones de deteccion de tecnologia
717
+ favicon-hashes.ts # Valores MurmurHash3 de favicon conocidos
718
+ c2-signatures.ts # Firmas de framework C2
719
+ ... # 15+ bases de datos de firmas/patrones
720
+ ```
721
+
722
+ **Decisiones de diseno:**
723
+
724
+ - **13 herramientas compuestas, 103 tecnicas** &mdash; El agente llama herramientas de alto nivel (`recon`, `scan_tls`, `scan_http`). Cada compuesto orquesta multiples tecnicas de bajo nivel y devuelve resultados correlacionados. Esto reduce la sobrecarga de llamadas a herramientas manteniendo la granularidad.
725
+ - **21 proveedores, 1 servidor** &mdash; Cada capa de fingerprinting es un modulo independiente. El orquestador compuesto selecciona tecnicas basandose en el contexto y la profundidad.
726
+ - **Activo primero, OSINT opcional** &mdash; 80+ tecnicas funcionan sondeando directamente el objetivo sin claves API. Los proveedores OSINT (Shodan, Censys, VirusTotal, SecurityTrails) agregan enriquecimiento pero nunca son requeridos.
727
+ - **Limitadores de tasa por proveedor** &mdash; Cada proveedor tiene su propia instancia de `RateLimiter`. El sondeo activo tiene limite de tasa para evitar deteccion; las APIs OSINT estan calibradas a sus cuotas.
728
+ - **Cache TTL** &mdash; Registros DNS (10 min), resultados OSINT (15 min), registros CT (30 min) se almacenan en cache para evitar consultas redundantes en flujos de trabajo multi-herramienta.
729
+ - **Degradacion elegante** &mdash; La falta de claves API no hace que el servidor se caiga. Las herramientas OSINT devuelven mensajes descriptivos: "Configure SHODAN_API_KEY para habilitar la consulta de host Shodan."
730
+ - **3 dependencias** &mdash; `@modelcontextprotocol/sdk`, `zod` y `cheerio`. Toda la E/S de red via `fetch()` nativo y modulos `net`/`tls`/`dns` de Node.js. Sin nmap, sin binarios externos.
731
+
732
+ ---
733
+
734
+ ## Limitaciones
735
+
736
+ - Las herramientas OSINT (Shodan, Censys, VirusTotal, SecurityTrails) requieren claves API para sus tecnicas respectivas
737
+ - El nivel gratuito de Censys esta limitado a 250 consultas/mes
738
+ - El nivel gratuito de VirusTotal esta limitado a 500 consultas/dia
739
+ - El escaneo de puertos usa TCP connect (no escaneo SYN) &mdash; menos sigiloso que nmap pero no requiere privilegios root
740
+ - El fingerprinting JARM requiere acceso TCP directo al objetivo (puede ser bloqueado por firewalls)
741
+ - El descubrimiento UPnP/SSDP solo funciona en redes locales
742
+ - El sondeo de servicios (MySQL, PostgreSQL, Redis) se conecta pero no autentica
743
+ - La enumeracion de subdominios depende de registros CT y fuentes pasivas (sin fuerza bruta)
744
+ - macOS / Linux probados (Windows no probado)
745
+
746
+ ---
747
+
748
+ ## Parte de la suite de seguridad MCP
749
+
750
+ | Proyecto | Dominio | Herramientas |
751
+ |----------|---------|--------------|
752
+ | [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | Pruebas de seguridad basadas en navegador | 39 herramientas, Firefox, pruebas de inyeccion |
753
+ | [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | Seguridad cloud (AWS/Azure/GCP) | 38 herramientas, 60+ verificaciones |
754
+ | [github-security-mcp](https://github.com/badchars/github-security-mcp) | Postura de seguridad GitHub | 39 herramientas, 45 verificaciones |
755
+ | [cve-mcp](https://github.com/badchars/cve-mcp) | Inteligencia de vulnerabilidades | 23 herramientas, 5 fuentes |
756
+ | [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT y reconocimiento | 37 herramientas, 12 fuentes |
757
+ | [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | Dark web e inteligencia de amenazas | 66 herramientas, 16 fuentes |
758
+ | **fingerprint-mcp** | **Huella digital universal** | **13 herramientas, 103 tecnicas, 21 proveedores** |
759
+
760
+ ---
761
+
762
+ <p align="center">
763
+ <b>Solo para pruebas y evaluaciones de seguridad autorizadas.</b><br>
764
+ Siempre asegurese de tener la autorizacion adecuada antes de realizar fingerprinting en cualquier objetivo.
765
+ </p>
766
+
767
+ <p align="center">
768
+ <a href="LICENSE">Licencia AGPL-3.0</a> &bull; Construido con Bun + TypeScript
769
+ </p>