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,610 @@
1
+ import { z } from "zod";
2
+ import * as dgram from "node:dgram";
3
+ import * as net from "node:net";
4
+ import { json } from "../types/index.js";
5
+ import { RateLimiter } from "../utils/rate-limiter.js";
6
+ // ─── Rate Limiter ───
7
+ const limiter = new RateLimiter(500);
8
+ // ─── Constants ───
9
+ const UDP_TIMEOUT = 4_000; // 4 seconds for UDP operations
10
+ const TCP_TIMEOUT = 5_000; // 5 seconds for TCP connections
11
+ const SSDP_MULTICAST_ADDR = "239.255.255.250";
12
+ const SSDP_PORT = 1900;
13
+ const SSDP_MSEARCH = [
14
+ "M-SEARCH * HTTP/1.1",
15
+ `HOST: ${SSDP_MULTICAST_ADDR}:${SSDP_PORT}`,
16
+ 'MAN: "ssdp:discover"',
17
+ "MX: 3",
18
+ "ST: ssdp:all",
19
+ "",
20
+ "",
21
+ ].join("\r\n");
22
+ // SNMP GET request for sysDescr.0 (OID 1.3.6.1.2.1.1.1.0) using "public" community
23
+ // Minimal SNMPv1 GET-Request packet
24
+ const SNMP_PORT = 161;
25
+ // Common IoT probe paths
26
+ const IOT_PROBE_PATHS = [
27
+ { path: "/", label: "Root" },
28
+ { path: "/cgi-bin/", label: "CGI-BIN (routers/cameras)" },
29
+ { path: "/HNAP1/", label: "HNAP1 (D-Link routers)" },
30
+ { path: "/api/system", label: "Generic IoT API" },
31
+ { path: "/login.htm", label: "Login page (routers)" },
32
+ { path: "/index.asp", label: "ASP index (IP cameras)" },
33
+ { path: "/doc/page/login.asp", label: "Hikvision login" },
34
+ { path: "/login.cgi", label: "CGI login (cameras)" },
35
+ { path: "/System/configurationFile?auth=YWRtaW46YTFCMKM0NTY=", label: "Default config (Dahua)" },
36
+ { path: "/goform/homepage", label: "Goform (Tenda/TP-Link)" },
37
+ ];
38
+ const IOT_MANAGEMENT_PORTS = [80, 443, 8080, 8443, 8888, 4443, 8000];
39
+ // IPMI port
40
+ const IPMI_PORT = 623;
41
+ // ─── Helpers ───
42
+ /**
43
+ * Send a UDP packet and wait for responses within a timeout.
44
+ */
45
+ function udpProbe(host, port, payload, timeoutMs = UDP_TIMEOUT) {
46
+ return new Promise((resolve) => {
47
+ const responses = [];
48
+ const socket = dgram.createSocket("udp4");
49
+ const timer = setTimeout(() => {
50
+ socket.close();
51
+ resolve({ responses });
52
+ }, timeoutMs);
53
+ socket.on("message", (msg, rinfo) => {
54
+ responses.push({ data: msg, rinfo });
55
+ });
56
+ socket.on("error", () => {
57
+ clearTimeout(timer);
58
+ try {
59
+ socket.close();
60
+ }
61
+ catch { /* ignore */ }
62
+ resolve({ responses });
63
+ });
64
+ socket.send(payload, 0, payload.length, port, host, (err) => {
65
+ if (err) {
66
+ clearTimeout(timer);
67
+ try {
68
+ socket.close();
69
+ }
70
+ catch { /* ignore */ }
71
+ resolve({ responses });
72
+ }
73
+ });
74
+ });
75
+ }
76
+ /**
77
+ * Check if a TCP port is open.
78
+ */
79
+ function tcpCheck(host, port, timeoutMs = TCP_TIMEOUT) {
80
+ return new Promise((resolve) => {
81
+ const socket = new net.Socket();
82
+ let banner = "";
83
+ const timer = setTimeout(() => {
84
+ socket.destroy();
85
+ resolve({ open: false, banner: "" });
86
+ }, timeoutMs);
87
+ socket.on("connect", () => {
88
+ clearTimeout(timer);
89
+ // Try to read a banner
90
+ const bannerTimer = setTimeout(() => {
91
+ socket.destroy();
92
+ resolve({ open: true, banner });
93
+ }, 2_000);
94
+ socket.on("data", (data) => {
95
+ banner += data.toString("utf-8").slice(0, 512);
96
+ clearTimeout(bannerTimer);
97
+ socket.destroy();
98
+ resolve({ open: true, banner });
99
+ });
100
+ });
101
+ socket.on("error", () => {
102
+ clearTimeout(timer);
103
+ socket.destroy();
104
+ resolve({ open: false, banner: "" });
105
+ });
106
+ socket.connect(port, host);
107
+ });
108
+ }
109
+ /**
110
+ * HTTP probe a specific path on a host.
111
+ */
112
+ async function httpProbe(host, port, path) {
113
+ try {
114
+ const protocol = port === 443 || port === 8443 || port === 4443 ? "https" : "http";
115
+ const controller = new AbortController();
116
+ const timeout = setTimeout(() => controller.abort(), TCP_TIMEOUT);
117
+ const res = await fetch(`${protocol}://${host}:${port}${path}`, {
118
+ signal: controller.signal,
119
+ redirect: "manual",
120
+ headers: {
121
+ "User-Agent": "Mozilla/5.0 (compatible; IoTProbe/1.0)",
122
+ Accept: "*/*",
123
+ },
124
+ });
125
+ clearTimeout(timeout);
126
+ const body = await res.text().catch(() => "");
127
+ const titleMatch = body.match(/<title[^>]*>([^<]*)<\/title>/i);
128
+ return {
129
+ status: res.status,
130
+ server: res.headers.get("server") ?? "",
131
+ title: titleMatch?.[1]?.trim() ?? "",
132
+ powered_by: res.headers.get("x-powered-by") ?? "",
133
+ content_length: body.length,
134
+ redirects_to: res.headers.get("location") ?? "",
135
+ };
136
+ }
137
+ catch {
138
+ return null;
139
+ }
140
+ }
141
+ /**
142
+ * Build a minimal SNMPv1 GET-Request for sysDescr.0 (1.3.6.1.2.1.1.1.0).
143
+ */
144
+ function buildSnmpGetRequest(community) {
145
+ // SNMPv1 GET-Request PDU for OID 1.3.6.1.2.1.1.1.0 (sysDescr.0)
146
+ const communityBuf = Buffer.from(community, "ascii");
147
+ // OID 1.3.6.1.2.1.1.1.0 encoded as BER
148
+ const oid = Buffer.from([
149
+ 0x06, 0x08, // OBJECT IDENTIFIER, length 8
150
+ 0x2b, 0x06, 0x01, 0x02, 0x01, 0x01, 0x01, 0x00, // 1.3.6.1.2.1.1.1.0
151
+ ]);
152
+ // VarBind: SEQUENCE { oid, NULL }
153
+ const nullValue = Buffer.from([0x05, 0x00]); // NULL
154
+ const varBind = Buffer.concat([
155
+ Buffer.from([0x30, oid.length + nullValue.length]), // SEQUENCE
156
+ oid,
157
+ nullValue,
158
+ ]);
159
+ // VarBindList: SEQUENCE { varBind }
160
+ const varBindList = Buffer.concat([
161
+ Buffer.from([0x30, varBind.length]), // SEQUENCE
162
+ varBind,
163
+ ]);
164
+ // Request ID (4 bytes)
165
+ const requestId = Buffer.from([
166
+ 0x02, 0x04, // INTEGER, length 4
167
+ 0x00, 0x00, 0x00, 0x01, // request-id = 1
168
+ ]);
169
+ // Error status and error index (both 0)
170
+ const errorStatus = Buffer.from([0x02, 0x01, 0x00]); // INTEGER 0
171
+ const errorIndex = Buffer.from([0x02, 0x01, 0x00]); // INTEGER 0
172
+ // GET-Request PDU
173
+ const pduContent = Buffer.concat([requestId, errorStatus, errorIndex, varBindList]);
174
+ const pdu = Buffer.concat([
175
+ Buffer.from([0xa0, pduContent.length]), // GetRequest-PDU tag (0xa0)
176
+ pduContent,
177
+ ]);
178
+ // SNMP Message: SEQUENCE { version, community, pdu }
179
+ const version = Buffer.from([0x02, 0x01, 0x00]); // INTEGER 0 (SNMPv1)
180
+ const communityTlv = Buffer.concat([
181
+ Buffer.from([0x04, communityBuf.length]), // OCTET STRING
182
+ communityBuf,
183
+ ]);
184
+ const messageContent = Buffer.concat([version, communityTlv, pdu]);
185
+ const message = Buffer.concat([
186
+ Buffer.from([0x30, messageContent.length]), // SEQUENCE
187
+ messageContent,
188
+ ]);
189
+ return message;
190
+ }
191
+ /**
192
+ * Parse a basic SNMP response to extract sysDescr string.
193
+ */
194
+ function parseSnmpResponse(data) {
195
+ try {
196
+ // Simple extraction: look for OCTET STRING values after the OID
197
+ // The response contains the sysDescr as an OCTET STRING
198
+ // Walk through the buffer looking for 0x04 (OCTET STRING) tags
199
+ // that contain printable ASCII text
200
+ const str = data.toString("ascii");
201
+ // Find the last substantial OCTET STRING in the response
202
+ let bestMatch = "";
203
+ for (let i = 0; i < data.length - 2; i++) {
204
+ if (data[i] === 0x04) {
205
+ const len = data[i + 1];
206
+ if (len > 5 && len < 200 && i + 2 + len <= data.length) {
207
+ const candidate = data.subarray(i + 2, i + 2 + len).toString("utf-8");
208
+ // Check if it's mostly printable ASCII
209
+ const printable = candidate.replace(/[^\x20-\x7e]/g, "");
210
+ if (printable.length > candidate.length * 0.8 && candidate.length > bestMatch.length) {
211
+ bestMatch = candidate;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ return bestMatch || null;
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ }
222
+ /**
223
+ * Parse SSDP response headers.
224
+ */
225
+ function parseSsdpResponse(data) {
226
+ const headers = {};
227
+ const lines = data.split("\r\n");
228
+ for (const line of lines) {
229
+ const colonIdx = line.indexOf(":");
230
+ if (colonIdx > 0) {
231
+ const key = line.substring(0, colonIdx).trim().toLowerCase();
232
+ const value = line.substring(colonIdx + 1).trim();
233
+ headers[key] = value;
234
+ }
235
+ }
236
+ return headers;
237
+ }
238
+ // ─── Tool 1: iot_probe ───
239
+ const iotProbe = {
240
+ name: "iot_probe",
241
+ description: "Detect IoT and embedded devices on a target host. Performs UPnP/SSDP discovery (UDP multicast M-SEARCH on 239.255.255.250:1900), " +
242
+ "probes common IoT ports and web management paths (/cgi-bin/, /HNAP1/, /api/system), " +
243
+ "SNMP community string probing (port 161 UDP with 'public' and 'private' communities to extract sysDescr), " +
244
+ "and IPMI detection on port 623 UDP. Identifies device type, manufacturer, model, and firmware where possible.",
245
+ schema: {
246
+ host: z.string().describe("Target host IP for IoT device detection"),
247
+ ports: z
248
+ .array(z.number())
249
+ .optional()
250
+ .describe("Additional ports to probe"),
251
+ },
252
+ async execute(args) {
253
+ const host = args.host;
254
+ const extraPorts = args.ports ?? [];
255
+ await limiter.acquire();
256
+ const results = {
257
+ ssdp: { discovered: false, devices: [] },
258
+ web_management: [],
259
+ snmp: { port_open: false, community_found: null, sys_descr: null },
260
+ ipmi: { port_open: false },
261
+ device_hints: [],
262
+ };
263
+ // 1. SSDP/UPnP Discovery (only useful for local network targets)
264
+ const isLocalTarget = host.startsWith("192.168.") ||
265
+ host.startsWith("10.") ||
266
+ /^172\.(1[6-9]|2\d|3[01])\./.test(host) ||
267
+ host === "127.0.0.1" ||
268
+ host === "localhost";
269
+ if (isLocalTarget) {
270
+ try {
271
+ const ssdpPayload = Buffer.from(SSDP_MSEARCH, "ascii");
272
+ const { responses } = await udpProbe(SSDP_MULTICAST_ADDR, SSDP_PORT, ssdpPayload, UDP_TIMEOUT);
273
+ for (const { data } of responses) {
274
+ const responseText = data.toString("utf-8");
275
+ const headers = parseSsdpResponse(responseText);
276
+ results.ssdp.devices.push({
277
+ location: headers["location"] ?? "",
278
+ server: headers["server"] ?? "",
279
+ st: headers["st"] ?? "",
280
+ usn: headers["usn"] ?? "",
281
+ headers,
282
+ });
283
+ if (headers["server"]) {
284
+ results.device_hints.push(`SSDP server: ${headers["server"]}`);
285
+ }
286
+ }
287
+ results.ssdp.discovered = results.ssdp.devices.length > 0;
288
+ }
289
+ catch {
290
+ // SSDP may not be available
291
+ }
292
+ }
293
+ // 2. Web management probing on common IoT ports
294
+ const portsToProbe = [...new Set([...IOT_MANAGEMENT_PORTS, ...extraPorts])];
295
+ for (const port of portsToProbe) {
296
+ await limiter.acquire();
297
+ const portCheck = await tcpCheck(host, port, TCP_TIMEOUT);
298
+ if (!portCheck.open)
299
+ continue;
300
+ const portResult = {
301
+ port,
302
+ open: true,
303
+ paths: [],
304
+ };
305
+ if (portCheck.banner) {
306
+ results.device_hints.push(`Banner on port ${port}: ${portCheck.banner.trim().slice(0, 200)}`);
307
+ }
308
+ // Probe IoT-specific paths
309
+ for (const { path, label } of IOT_PROBE_PATHS) {
310
+ const probeResult = await httpProbe(host, port, path);
311
+ if (probeResult && probeResult.status !== 0) {
312
+ portResult.paths.push({
313
+ path,
314
+ label,
315
+ status: probeResult.status,
316
+ server: probeResult.server,
317
+ title: probeResult.title,
318
+ powered_by: probeResult.powered_by,
319
+ });
320
+ // Extract device hints from server header and page title
321
+ if (probeResult.server) {
322
+ results.device_hints.push(`Server (${port}${path}): ${probeResult.server}`);
323
+ }
324
+ if (probeResult.title) {
325
+ results.device_hints.push(`Title (${port}${path}): ${probeResult.title}`);
326
+ }
327
+ // Detect specific IoT device patterns
328
+ const combined = `${probeResult.server} ${probeResult.title} ${probeResult.powered_by}`.toLowerCase();
329
+ if (/hikvision/i.test(combined))
330
+ results.device_hints.push("Device: Hikvision (IP camera/NVR)");
331
+ if (/dahua/i.test(combined))
332
+ results.device_hints.push("Device: Dahua (IP camera/NVR)");
333
+ if (/d-link/i.test(combined))
334
+ results.device_hints.push("Device: D-Link (router/camera)");
335
+ if (/tp-link|tplink/i.test(combined))
336
+ results.device_hints.push("Device: TP-Link (router/AP)");
337
+ if (/netgear/i.test(combined))
338
+ results.device_hints.push("Device: Netgear (router)");
339
+ if (/linksys/i.test(combined))
340
+ results.device_hints.push("Device: Linksys (router)");
341
+ if (/mikrotik|routeros/i.test(combined))
342
+ results.device_hints.push("Device: MikroTik (RouterOS)");
343
+ if (/ubiquiti|unifi/i.test(combined))
344
+ results.device_hints.push("Device: Ubiquiti (UniFi/EdgeOS)");
345
+ if (/synology/i.test(combined))
346
+ results.device_hints.push("Device: Synology (NAS)");
347
+ if (/qnap/i.test(combined))
348
+ results.device_hints.push("Device: QNAP (NAS)");
349
+ if (/boa\/|mini_httpd|lighttpd|goahead/i.test(combined))
350
+ results.device_hints.push("Embedded web server detected");
351
+ }
352
+ await limiter.acquire();
353
+ }
354
+ if (portResult.paths.length > 0) {
355
+ results.web_management.push(portResult);
356
+ }
357
+ }
358
+ // 3. SNMP community string probing
359
+ const snmpCommunities = ["public", "private"];
360
+ for (const community of snmpCommunities) {
361
+ try {
362
+ const snmpPacket = buildSnmpGetRequest(community);
363
+ const { responses } = await udpProbe(host, SNMP_PORT, snmpPacket, UDP_TIMEOUT);
364
+ if (responses.length > 0) {
365
+ results.snmp.port_open = true;
366
+ results.snmp.community_found = community;
367
+ const sysDescr = parseSnmpResponse(responses[0].data);
368
+ if (sysDescr) {
369
+ results.snmp.sys_descr = sysDescr;
370
+ results.device_hints.push(`SNMP sysDescr (community '${community}'): ${sysDescr}`);
371
+ }
372
+ else {
373
+ results.device_hints.push(`SNMP responds to community '${community}' but sysDescr could not be parsed`);
374
+ }
375
+ break; // Found a working community, stop trying
376
+ }
377
+ }
378
+ catch {
379
+ // SNMP probe may fail
380
+ }
381
+ }
382
+ // 4. IPMI detection (port 623 UDP)
383
+ try {
384
+ // IPMI RMCP ping: version 0x06, reserved 0x00, sequence 0xFF, class 0x06 (ASF)
385
+ // ASF presence ping
386
+ const ipmiPing = Buffer.from([
387
+ 0x06, 0x00, 0xff, 0x06, // RMCP header
388
+ 0x00, 0x00, 0x11, 0xbe, // ASF IANA
389
+ 0x80, // ASF message type (presence ping)
390
+ 0x00, // message tag
391
+ 0x00, // reserved
392
+ 0x00, // data length
393
+ ]);
394
+ const { responses } = await udpProbe(host, IPMI_PORT, ipmiPing, UDP_TIMEOUT);
395
+ if (responses.length > 0) {
396
+ results.ipmi.port_open = true;
397
+ results.device_hints.push("IPMI/BMC detected on port 623 (server hardware with out-of-band management)");
398
+ }
399
+ }
400
+ catch {
401
+ // IPMI probe may fail
402
+ }
403
+ // Deduplicate device hints
404
+ results.device_hints = [...new Set(results.device_hints)];
405
+ return json({
406
+ host,
407
+ is_local_target: isLocalTarget,
408
+ ...results,
409
+ });
410
+ },
411
+ };
412
+ // ─── Tool 2: iot_mac_lookup ───
413
+ // OUI prefix database (~50 common entries)
414
+ const OUI_DATABASE = {
415
+ "005056": "VMware",
416
+ "000C29": "VMware",
417
+ "001C14": "VMware",
418
+ "0050C2": "IEEE Registration Authority",
419
+ "00163E": "Xen (virtual)",
420
+ "080027": "Oracle VirtualBox",
421
+ "0A0027": "Oracle VirtualBox",
422
+ "B827EB": "Raspberry Pi Foundation",
423
+ "DCA632": "Raspberry Pi Foundation",
424
+ "E45F01": "Raspberry Pi Foundation",
425
+ "D83ADD": "Raspberry Pi Foundation",
426
+ "001B44": "Dell",
427
+ "001A2B": "Cisco Systems",
428
+ "00259C": "Cisco Systems",
429
+ "001839": "Cisco Systems",
430
+ "0025B5": "Hewlett Packard",
431
+ "3C4A92": "Hewlett Packard",
432
+ "001E67": "Intel Corporate",
433
+ "001CC0": "Intel Corporate",
434
+ "A4BADB": "Intel Corporate",
435
+ "001AA0": "Dell",
436
+ "F0DEF1": "Google",
437
+ "3C5AB4": "Google",
438
+ "A47733": "Google",
439
+ "3C22FB": "Apple",
440
+ "A483E7": "Apple",
441
+ "F0D1A9": "Apple",
442
+ "6C709F": "Apple",
443
+ "AC87A3": "Apple",
444
+ "D0817A": "Apple",
445
+ "000DB9": "PC Engines (APU)",
446
+ "001C42": "Parallels",
447
+ "00155D": "Microsoft Hyper-V",
448
+ "B4FBE4": "Ubiquiti Networks",
449
+ "18E829": "Ubiquiti Networks",
450
+ "788A20": "Ubiquiti Networks",
451
+ "68D79A": "Ubiquiti Networks",
452
+ "0024A5": "Synology",
453
+ "001132": "Synology",
454
+ "443839": "Cumulus Networks",
455
+ "000F66": "MikroTik",
456
+ "D4CA6D": "MikroTik",
457
+ "6C3B6B": "MikroTik",
458
+ "E48D8C": "MikroTik",
459
+ "C4AD34": "Routerboard (MikroTik)",
460
+ "001E58": "D-Link",
461
+ "1CBDB9": "D-Link",
462
+ "28107B": "D-Link",
463
+ "C0A0BB": "D-Link",
464
+ "5C497D": "TP-Link",
465
+ "E894F6": "TP-Link",
466
+ "6466B3": "TP-Link",
467
+ "E8DE27": "TP-Link",
468
+ "28EE52": "Netgear",
469
+ "C43DC7": "Netgear",
470
+ "A040A0": "Netgear",
471
+ "001AA1": "Cisco Linksys (Belkin)",
472
+ "20AA4B": "Cisco Linksys (Belkin)",
473
+ "58EF68": "Aruba Networks",
474
+ "000B86": "Aruba Networks",
475
+ "D8C7C8": "Aruba Networks",
476
+ "485B39": "Hewlett Packard Enterprise",
477
+ "2CF0A2": "Asus",
478
+ "10C37B": "Asus",
479
+ "60A44C": "Asus",
480
+ "0090A9": "Western Digital",
481
+ "001673": "Zyxel (ZyXEL Communications)",
482
+ "C86C87": "Zyxel (ZyXEL Communications)",
483
+ "001D09": "Dell (iDRAC)",
484
+ "005054": "QEMU/KVM (virtual)",
485
+ "525400": "QEMU/KVM (virtual)",
486
+ "000569": "VMware (ESXi vSwitch)",
487
+ "00249B": "Amazon (AWS)",
488
+ "0A5871": "Amazon (AWS ENI)",
489
+ "06B946": "Amazon (AWS ENI)",
490
+ "0CD0F8": "Samsung",
491
+ "A0CBFD": "Samsung",
492
+ "000AEB": "TP-Link",
493
+ "001EE5": "Cisco Meraki",
494
+ "0018A5": "Hikvision",
495
+ "38AF29": "Hikvision",
496
+ "C0563A": "Hikvision",
497
+ "E05FB9": "Hikvision",
498
+ "34A846": "Dahua",
499
+ "A063A1": "Dahua",
500
+ "B0C5CA": "Dahua",
501
+ };
502
+ /**
503
+ * Normalize a MAC address to uppercase hex without separators.
504
+ */
505
+ function normalizeMac(mac) {
506
+ return mac.replace(/[:\-\.]/g, "").toUpperCase();
507
+ }
508
+ /**
509
+ * Format a MAC address in standard colon-separated notation.
510
+ */
511
+ function formatMac(normalized) {
512
+ return normalized.match(/.{1,2}/g)?.join(":") ?? normalized;
513
+ }
514
+ const iotMacLookup = {
515
+ name: "iot_mac_lookup",
516
+ description: "Look up the manufacturer/vendor of a network device by its MAC address using OUI (Organizationally Unique Identifier) prefix matching. " +
517
+ "Supports any MAC format: XX:XX:XX:XX:XX:XX, XX-XX-XX-XX-XX-XX, or XXXXXXXXXXXX. " +
518
+ "Includes ~80 common OUI prefixes covering VMware, Cisco, Apple, Raspberry Pi, Ubiquiti, MikroTik, Hikvision, Dahua, and more.",
519
+ schema: {
520
+ mac: z
521
+ .string()
522
+ .describe("MAC address (any format: XX:XX:XX:XX:XX:XX, XX-XX-XX-XX-XX-XX, or XXXXXXXXXXXX)"),
523
+ },
524
+ async execute(args) {
525
+ const rawMac = args.mac;
526
+ const normalized = normalizeMac(rawMac);
527
+ // Validate MAC format
528
+ if (!/^[0-9A-F]{12}$/.test(normalized)) {
529
+ return json({
530
+ error: "Invalid MAC address format",
531
+ input: rawMac,
532
+ expected_formats: [
533
+ "XX:XX:XX:XX:XX:XX",
534
+ "XX-XX-XX-XX-XX-XX",
535
+ "XXXXXXXXXXXX",
536
+ ],
537
+ });
538
+ }
539
+ const oui = normalized.substring(0, 6);
540
+ const manufacturer = OUI_DATABASE[oui] ?? null;
541
+ // Determine device category based on manufacturer
542
+ let category = "Unknown";
543
+ if (manufacturer) {
544
+ const mfgLower = manufacturer.toLowerCase();
545
+ if (/vmware|virtualbox|hyper-v|parallels|xen|qemu|kvm|virtual/i.test(manufacturer)) {
546
+ category = "Virtual Machine / Hypervisor";
547
+ }
548
+ else if (/raspberry pi/i.test(manufacturer)) {
549
+ category = "Single-Board Computer (SBC)";
550
+ }
551
+ else if (/cisco|mikrotik|routerboard|tp-link|netgear|linksys|d-link|asus|zyxel|aruba/i.test(manufacturer)) {
552
+ category = "Network Equipment (Router/Switch/AP)";
553
+ }
554
+ else if (/ubiquiti/i.test(manufacturer)) {
555
+ category = "Network Equipment (Ubiquiti)";
556
+ }
557
+ else if (/hikvision|dahua/i.test(manufacturer)) {
558
+ category = "IP Camera / NVR / DVR";
559
+ }
560
+ else if (/synology|qnap|western digital/i.test(manufacturer)) {
561
+ category = "Network Attached Storage (NAS)";
562
+ }
563
+ else if (/apple/i.test(manufacturer)) {
564
+ category = "Apple Device";
565
+ }
566
+ else if (/google/i.test(manufacturer)) {
567
+ category = "Google Device";
568
+ }
569
+ else if (/samsung/i.test(manufacturer)) {
570
+ category = "Samsung Device";
571
+ }
572
+ else if (/dell|hewlett|intel|pc engines/i.test(manufacturer)) {
573
+ category = "Server / Workstation";
574
+ }
575
+ else if (/amazon|aws/i.test(manufacturer)) {
576
+ category = "Cloud Instance (AWS)";
577
+ }
578
+ else if (/cisco meraki/i.test(manufacturer)) {
579
+ category = "Cloud-Managed Network (Meraki)";
580
+ }
581
+ else if (/idrac/i.test(mfgLower)) {
582
+ category = "Out-of-Band Management (iDRAC)";
583
+ }
584
+ else if (/cumulus/i.test(manufacturer)) {
585
+ category = "Network Operating System (Cumulus Linux)";
586
+ }
587
+ }
588
+ // Check if it's a locally administered address (bit 1 of first octet)
589
+ const firstByte = parseInt(normalized.substring(0, 2), 16);
590
+ const isLocallyAdministered = (firstByte & 0x02) !== 0;
591
+ const isMulticast = (firstByte & 0x01) !== 0;
592
+ return json({
593
+ mac: formatMac(normalized),
594
+ mac_normalized: normalized,
595
+ oui_prefix: formatMac(oui + "000000").substring(0, 8),
596
+ manufacturer: manufacturer ?? "Unknown (OUI not in local database)",
597
+ category,
598
+ is_locally_administered: isLocallyAdministered,
599
+ is_multicast: isMulticast,
600
+ note: isLocallyAdministered
601
+ ? "This is a locally administered address (LAA) — may be randomized (iOS/Android privacy feature) or virtual"
602
+ : manufacturer
603
+ ? undefined
604
+ : "OUI prefix not found in local database. For comprehensive lookup, use IEEE OUI database at https://standards-oui.ieee.org/",
605
+ });
606
+ },
607
+ };
608
+ // ─── Export All IoT Tools ───
609
+ export const iotTools = [iotProbe, iotMacLookup];
610
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/iot/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "../types/index.js";
2
+ export declare const metaTools: ToolDef[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/meta/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,mBAAmB,CAAC;AAsd9D,eAAO,MAAM,SAAS,EAAE,OAAO,EAG9B,CAAC"}