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.
- package/LICENSE +663 -0
- package/README.ar.md +767 -0
- package/README.bn.md +767 -0
- package/README.bs.md +767 -0
- package/README.da.md +767 -0
- package/README.de.md +770 -0
- package/README.el.md +767 -0
- package/README.es.md +769 -0
- package/README.fr.md +769 -0
- package/README.hi.md +767 -0
- package/README.it.md +767 -0
- package/README.ja.md +767 -0
- package/README.ko.md +772 -0
- package/README.md +767 -0
- package/README.no.md +767 -0
- package/README.pl.md +767 -0
- package/README.pt-BR.md +767 -0
- package/README.ru.md +767 -0
- package/README.th.md +767 -0
- package/README.tr.md +767 -0
- package/README.uk.md +767 -0
- package/README.vi.md +767 -0
- package/README.zh-TW.md +768 -0
- package/README.zh.md +768 -0
- package/dist/app/index.d.ts +3 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +614 -0
- package/dist/app/index.js.map +1 -0
- package/dist/composite/analyze.d.ts +3 -0
- package/dist/composite/analyze.d.ts.map +1 -0
- package/dist/composite/analyze.js +59 -0
- package/dist/composite/analyze.js.map +1 -0
- package/dist/composite/correlate.d.ts +3 -0
- package/dist/composite/correlate.d.ts.map +1 -0
- package/dist/composite/correlate.js +184 -0
- package/dist/composite/correlate.js.map +1 -0
- package/dist/composite/enumerate.d.ts +3 -0
- package/dist/composite/enumerate.d.ts.map +1 -0
- package/dist/composite/enumerate.js +94 -0
- package/dist/composite/enumerate.js.map +1 -0
- package/dist/composite/helpers.d.ts +22 -0
- package/dist/composite/helpers.d.ts.map +1 -0
- package/dist/composite/helpers.js +111 -0
- package/dist/composite/helpers.js.map +1 -0
- package/dist/composite/index.d.ts +3 -0
- package/dist/composite/index.d.ts.map +1 -0
- package/dist/composite/index.js +29 -0
- package/dist/composite/index.js.map +1 -0
- package/dist/composite/meta.d.ts +3 -0
- package/dist/composite/meta.d.ts.map +1 -0
- package/dist/composite/meta.js +23 -0
- package/dist/composite/meta.js.map +1 -0
- package/dist/composite/osint.d.ts +3 -0
- package/dist/composite/osint.d.ts.map +1 -0
- package/dist/composite/osint.js +40 -0
- package/dist/composite/osint.js.map +1 -0
- package/dist/composite/recon.d.ts +3 -0
- package/dist/composite/recon.d.ts.map +1 -0
- package/dist/composite/recon.js +131 -0
- package/dist/composite/recon.js.map +1 -0
- package/dist/composite/scan-dns.d.ts +3 -0
- package/dist/composite/scan-dns.d.ts.map +1 -0
- package/dist/composite/scan-dns.js +44 -0
- package/dist/composite/scan-dns.js.map +1 -0
- package/dist/composite/scan-http.d.ts +3 -0
- package/dist/composite/scan-http.d.ts.map +1 -0
- package/dist/composite/scan-http.js +68 -0
- package/dist/composite/scan-http.js.map +1 -0
- package/dist/composite/scan-paths.d.ts +3 -0
- package/dist/composite/scan-paths.d.ts.map +1 -0
- package/dist/composite/scan-paths.js +32 -0
- package/dist/composite/scan-paths.js.map +1 -0
- package/dist/composite/scan-ports.d.ts +3 -0
- package/dist/composite/scan-ports.d.ts.map +1 -0
- package/dist/composite/scan-ports.js +79 -0
- package/dist/composite/scan-ports.js.map +1 -0
- package/dist/composite/scan-services.d.ts +3 -0
- package/dist/composite/scan-services.d.ts.map +1 -0
- package/dist/composite/scan-services.js +111 -0
- package/dist/composite/scan-services.js.map +1 -0
- package/dist/composite/scan-tls.d.ts +3 -0
- package/dist/composite/scan-tls.d.ts.map +1 -0
- package/dist/composite/scan-tls.js +32 -0
- package/dist/composite/scan-tls.js.map +1 -0
- package/dist/composite/scan-waf.d.ts +3 -0
- package/dist/composite/scan-waf.d.ts.map +1 -0
- package/dist/composite/scan-waf.js +35 -0
- package/dist/composite/scan-waf.js.map +1 -0
- package/dist/correlation/index.d.ts +3 -0
- package/dist/correlation/index.d.ts.map +1 -0
- package/dist/correlation/index.js +1044 -0
- package/dist/correlation/index.js.map +1 -0
- package/dist/data/analytics-patterns.d.ts +21 -0
- package/dist/data/analytics-patterns.d.ts.map +1 -0
- package/dist/data/analytics-patterns.js +449 -0
- package/dist/data/analytics-patterns.js.map +1 -0
- package/dist/data/app-signatures.d.ts +52 -0
- package/dist/data/app-signatures.d.ts.map +1 -0
- package/dist/data/app-signatures.js +1143 -0
- package/dist/data/app-signatures.js.map +1 -0
- package/dist/data/c2-signatures.d.ts +54 -0
- package/dist/data/c2-signatures.d.ts.map +1 -0
- package/dist/data/c2-signatures.js +256 -0
- package/dist/data/c2-signatures.js.map +1 -0
- package/dist/data/cloud-ranges.d.ts +34 -0
- package/dist/data/cloud-ranges.d.ts.map +1 -0
- package/dist/data/cloud-ranges.js +628 -0
- package/dist/data/cloud-ranges.js.map +1 -0
- package/dist/data/cookie-patterns.d.ts +28 -0
- package/dist/data/cookie-patterns.d.ts.map +1 -0
- package/dist/data/cookie-patterns.js +225 -0
- package/dist/data/cookie-patterns.js.map +1 -0
- package/dist/data/error-signatures.d.ts +19 -0
- package/dist/data/error-signatures.d.ts.map +1 -0
- package/dist/data/error-signatures.js +321 -0
- package/dist/data/error-signatures.js.map +1 -0
- package/dist/data/favicon-hashes.d.ts +25 -0
- package/dist/data/favicon-hashes.d.ts.map +1 -0
- package/dist/data/favicon-hashes.js +249 -0
- package/dist/data/favicon-hashes.js.map +1 -0
- package/dist/data/h2-signatures.d.ts +50 -0
- package/dist/data/h2-signatures.d.ts.map +1 -0
- package/dist/data/h2-signatures.js +211 -0
- package/dist/data/h2-signatures.js.map +1 -0
- package/dist/data/header-order.d.ts +38 -0
- package/dist/data/header-order.d.ts.map +1 -0
- package/dist/data/header-order.js +185 -0
- package/dist/data/header-order.js.map +1 -0
- package/dist/data/jarm-signatures.d.ts +25 -0
- package/dist/data/jarm-signatures.d.ts.map +1 -0
- package/dist/data/jarm-signatures.js +213 -0
- package/dist/data/jarm-signatures.js.map +1 -0
- package/dist/data/saas-patterns.d.ts +23 -0
- package/dist/data/saas-patterns.d.ts.map +1 -0
- package/dist/data/saas-patterns.js +139 -0
- package/dist/data/saas-patterns.js.map +1 -0
- package/dist/data/sensitive-paths.d.ts +12 -0
- package/dist/data/sensitive-paths.d.ts.map +1 -0
- package/dist/data/sensitive-paths.js +1539 -0
- package/dist/data/sensitive-paths.js.map +1 -0
- package/dist/data/service-banners.d.ts +59 -0
- package/dist/data/service-banners.d.ts.map +1 -0
- package/dist/data/service-banners.js +323 -0
- package/dist/data/service-banners.js.map +1 -0
- package/dist/data/smtp-signatures.d.ts +12 -0
- package/dist/data/smtp-signatures.d.ts.map +1 -0
- package/dist/data/smtp-signatures.js +350 -0
- package/dist/data/smtp-signatures.js.map +1 -0
- package/dist/data/takeover-patterns.d.ts +37 -0
- package/dist/data/takeover-patterns.d.ts.map +1 -0
- package/dist/data/takeover-patterns.js +249 -0
- package/dist/data/takeover-patterns.js.map +1 -0
- package/dist/data/tech-patterns.d.ts +44 -0
- package/dist/data/tech-patterns.d.ts.map +1 -0
- package/dist/data/tech-patterns.js +690 -0
- package/dist/data/tech-patterns.js.map +1 -0
- package/dist/data/waf-signatures.d.ts +21 -0
- package/dist/data/waf-signatures.d.ts.map +1 -0
- package/dist/data/waf-signatures.js +318 -0
- package/dist/data/waf-signatures.js.map +1 -0
- package/dist/dns/index.d.ts +3 -0
- package/dist/dns/index.d.ts.map +1 -0
- package/dist/dns/index.js +1067 -0
- package/dist/dns/index.js.map +1 -0
- package/dist/enum/index.d.ts +3 -0
- package/dist/enum/index.d.ts.map +1 -0
- package/dist/enum/index.js +818 -0
- package/dist/enum/index.js.map +1 -0
- package/dist/h2/index.d.ts +3 -0
- package/dist/h2/index.d.ts.map +1 -0
- package/dist/h2/index.js +414 -0
- package/dist/h2/index.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +2444 -0
- package/dist/http/index.js.map +1 -0
- package/dist/identify/index.d.ts +3 -0
- package/dist/identify/index.d.ts.map +1 -0
- package/dist/identify/index.js +447 -0
- package/dist/identify/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/index.d.ts +3 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +989 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/iot/index.d.ts +3 -0
- package/dist/iot/index.d.ts.map +1 -0
- package/dist/iot/index.js +610 -0
- package/dist/iot/index.js.map +1 -0
- package/dist/meta/index.d.ts +3 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +442 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/osint/index.d.ts +3 -0
- package/dist/osint/index.d.ts.map +1 -0
- package/dist/osint/index.js +687 -0
- package/dist/osint/index.js.map +1 -0
- package/dist/passive/index.d.ts +3 -0
- package/dist/passive/index.d.ts.map +1 -0
- package/dist/passive/index.js +944 -0
- package/dist/passive/index.js.map +1 -0
- package/dist/path/index.d.ts +3 -0
- package/dist/path/index.d.ts.map +1 -0
- package/dist/path/index.js +878 -0
- package/dist/path/index.js.map +1 -0
- package/dist/protocol/mcp-server.d.ts +4 -0
- package/dist/protocol/mcp-server.d.ts.map +1 -0
- package/dist/protocol/mcp-server.js +32 -0
- package/dist/protocol/mcp-server.js.map +1 -0
- package/dist/protocol/tools.d.ts +3 -0
- package/dist/protocol/tools.d.ts.map +1 -0
- package/dist/protocol/tools.js +5 -0
- package/dist/protocol/tools.js.map +1 -0
- package/dist/service/index.d.ts +3 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +1053 -0
- package/dist/service/index.js.map +1 -0
- package/dist/smtp/index.d.ts +3 -0
- package/dist/smtp/index.d.ts.map +1 -0
- package/dist/smtp/index.js +437 -0
- package/dist/smtp/index.js.map +1 -0
- package/dist/ssh/index.d.ts +3 -0
- package/dist/ssh/index.d.ts.map +1 -0
- package/dist/ssh/index.js +676 -0
- package/dist/ssh/index.js.map +1 -0
- package/dist/tcp/index.d.ts +3 -0
- package/dist/tcp/index.d.ts.map +1 -0
- package/dist/tcp/index.js +369 -0
- package/dist/tcp/index.js.map +1 -0
- package/dist/timing/index.d.ts +3 -0
- package/dist/timing/index.d.ts.map +1 -0
- package/dist/timing/index.js +425 -0
- package/dist/timing/index.js.map +1 -0
- package/dist/tls/index.d.ts +3 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/dist/tls/index.js +1332 -0
- package/dist/tls/index.js.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +11 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +35 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/murmurhash3.d.ts +3 -0
- package/dist/utils/murmurhash3.d.ts.map +1 -0
- package/dist/utils/murmurhash3.js +57 -0
- package/dist/utils/murmurhash3.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +10 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +35 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/require-key.d.ts +2 -0
- package/dist/utils/require-key.d.ts.map +1 -0
- package/dist/utils/require-key.js +8 -0
- package/dist/utils/require-key.js.map +1 -0
- package/dist/waf/index.d.ts +3 -0
- package/dist/waf/index.d.ts.map +1 -0
- package/dist/waf/index.js +767 -0
- package/dist/waf/index.js.map +1 -0
- package/dist/web/index.d.ts +3 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +1366 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
export const osintTool = {
|
|
4
|
+
name: "osint",
|
|
5
|
+
description: "OSINT enrichment: Shodan host lookup, Censys search, reverse IP lookup, WHOIS information, Wayback Machine historical snapshots, and VirusTotal intelligence. Supports both IP and domain targets with auto-detection. 6 techniques in a single call.",
|
|
6
|
+
schema: {
|
|
7
|
+
target: z.string().describe("IP address or domain for OSINT lookup"),
|
|
8
|
+
type: z
|
|
9
|
+
.enum(["ip", "domain"])
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Target type (auto-detected if omitted)"),
|
|
12
|
+
},
|
|
13
|
+
async execute(args, ctx) {
|
|
14
|
+
const target = args.target;
|
|
15
|
+
const type = args.type ??
|
|
16
|
+
(/^\d+\.\d+\.\d+\.\d+$/.test(target) ? "ip" : "domain");
|
|
17
|
+
let calls;
|
|
18
|
+
if (type === "ip") {
|
|
19
|
+
calls = [
|
|
20
|
+
{ name: "osint_shodan", args: { ip: target } },
|
|
21
|
+
{ name: "osint_censys", args: { ip: target } },
|
|
22
|
+
{ name: "osint_reverse_ip", args: { ip: target } },
|
|
23
|
+
{ name: "osint_whois", args: { target } },
|
|
24
|
+
{ name: "osint_virustotal", args: { target, type: "ip" } },
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
calls = [
|
|
29
|
+
{ name: "osint_shodan", args: { query: "hostname:" + target } },
|
|
30
|
+
{ name: "osint_censys", args: { query: target } },
|
|
31
|
+
{ name: "osint_whois", args: { target } },
|
|
32
|
+
{ name: "osint_web_archive", args: { url: "https://" + target } },
|
|
33
|
+
{ name: "osint_virustotal", args: { target, type: "domain" } },
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
const results = await callToolsParallel(calls, ctx);
|
|
37
|
+
return buildCompositeResponse("osint", results);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=osint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osint.js","sourceRoot":"","sources":["../../src/composite/osint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,OAAO;IACb,WAAW,EACT,uPAAuP;IACzP,MAAM,EAAE;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACpE,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACtB,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;QACrC,MAAM,IAAI,GACP,IAAI,CAAC,IAAoC;YAC1C,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE1D,IAAI,KAA6D,CAAC;QAElE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,KAAK,GAAG;gBACN,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;gBAC9C,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;gBAC9C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;gBAClD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;gBACzC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;aAC3D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,GAAG;gBACN,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,EAAE;gBAC/D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACjD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;gBACzC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,EAAE;gBACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEpD,OAAO,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recon.d.ts","sourceRoot":"","sources":["../../src/composite/recon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAoH1E,eAAO,MAAM,SAAS,EAAE,OAmEvB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse, parseTarget, } from "./helpers.js";
|
|
3
|
+
// ─── Quick Techniques (5) ───
|
|
4
|
+
const QUICK_CALLS = (url, host, domain, port) => [
|
|
5
|
+
{ name: "http_headers", args: { url } },
|
|
6
|
+
{ name: "dns_records", args: { domain } },
|
|
7
|
+
{ name: "tls_cert", args: { host, port } },
|
|
8
|
+
{ name: "web_tech", args: { url } },
|
|
9
|
+
{ name: "infra_cloud_detect", args: { target: host } },
|
|
10
|
+
];
|
|
11
|
+
// ─── Standard Techniques (+15) ───
|
|
12
|
+
const STANDARD_CALLS = (url, host, domain, port) => [
|
|
13
|
+
{ name: "http_favicon", args: { url } },
|
|
14
|
+
{ name: "http_cookies", args: { url } },
|
|
15
|
+
{ name: "http_etag", args: { url } },
|
|
16
|
+
{ name: "http_errors", args: { url } },
|
|
17
|
+
{ name: "http_security", args: { url } },
|
|
18
|
+
{ name: "tls_probe", args: { host, port } },
|
|
19
|
+
{ name: "tls_jarm", args: { host, port } },
|
|
20
|
+
{ name: "waf_detect", args: { url } },
|
|
21
|
+
{ name: "waf_cdn_detect", args: { url } },
|
|
22
|
+
{ name: "app_cms", args: { url } },
|
|
23
|
+
{ name: "app_framework", args: { url } },
|
|
24
|
+
{ name: "web_analytics", args: { url } },
|
|
25
|
+
{ name: "dns_email", args: { domain } },
|
|
26
|
+
{ name: "dns_saas", args: { domain } },
|
|
27
|
+
{ name: "path_robots", args: { url } },
|
|
28
|
+
];
|
|
29
|
+
// ─── Deep Batch 1 (~15) ───
|
|
30
|
+
const DEEP_BATCH_1 = (url, host, port) => [
|
|
31
|
+
{ name: "http_multi_fingerprint", args: { url } },
|
|
32
|
+
{ name: "http_methods", args: { url } },
|
|
33
|
+
{ name: "http_cors", args: { url } },
|
|
34
|
+
{ name: "http_compression", args: { url } },
|
|
35
|
+
{ name: "http_cache", args: { url } },
|
|
36
|
+
{ name: "http_timing", args: { url } },
|
|
37
|
+
{ name: "http_redirect", args: { url } },
|
|
38
|
+
{ name: "http_keepalive", args: { url } },
|
|
39
|
+
{ name: "http_resource_hints", args: { url } },
|
|
40
|
+
{ name: "http_server_timing", args: { url } },
|
|
41
|
+
{ name: "http_nel", args: { url } },
|
|
42
|
+
{ name: "tls_ja4x", args: { host, port } },
|
|
43
|
+
{ name: "tls_ciphers", args: { host, port } },
|
|
44
|
+
{ name: "tls_sni", args: { host, port } },
|
|
45
|
+
{ name: "tls_cert_cross_ref", args: { host, port } },
|
|
46
|
+
];
|
|
47
|
+
// ─── Deep Batch 2 (~15) ───
|
|
48
|
+
const DEEP_BATCH_2 = (url, host, domain, port) => [
|
|
49
|
+
{ name: "tls_ct_subdomains", args: { domain } },
|
|
50
|
+
{ name: "dns_server_fp", args: { domain } },
|
|
51
|
+
{ name: "dns_mta_sts", args: { domain } },
|
|
52
|
+
{ name: "dns_takeover", args: { domain } },
|
|
53
|
+
{ name: "web_sourcemaps", args: { url } },
|
|
54
|
+
{ name: "web_api_discovery", args: { url } },
|
|
55
|
+
{ name: "web_websocket", args: { url } },
|
|
56
|
+
{ name: "web_sri", args: { url } },
|
|
57
|
+
{ name: "app_ecommerce", args: { url } },
|
|
58
|
+
{ name: "path_sensitive", args: { url } },
|
|
59
|
+
{ name: "path_git_leak", args: { url } },
|
|
60
|
+
{ name: "path_debug", args: { url } },
|
|
61
|
+
{ name: "path_api_version", args: { url } },
|
|
62
|
+
{ name: "timing_baseline", args: { url } },
|
|
63
|
+
{ name: "h2_detect", args: { host, port } },
|
|
64
|
+
];
|
|
65
|
+
// ─── Deep Batch 3 (~7) ───
|
|
66
|
+
const DEEP_BATCH_3 = (url, host, domain, port) => [
|
|
67
|
+
{ name: "h2_server_fp", args: { host, port } },
|
|
68
|
+
{ name: "waf_fingerprint", args: { url } },
|
|
69
|
+
{ name: "infra_asn_lookup", args: { ip: host } },
|
|
70
|
+
{ name: "infra_cdn_identify", args: { url } },
|
|
71
|
+
{ name: "infra_reverse_proxy_detect", args: { url } },
|
|
72
|
+
{ name: "infra_lb_detect", args: { url } },
|
|
73
|
+
{ name: "waf_origin", args: { domain } },
|
|
74
|
+
];
|
|
75
|
+
// ─── Recon Composite Tool ───
|
|
76
|
+
export const reconTool = {
|
|
77
|
+
name: "recon",
|
|
78
|
+
description: "Full target reconnaissance. Runs HTTP headers, TLS certificate, DNS records, web technology detection, WAF/CDN, and infrastructure analysis in a single call. Use depth parameter to control scope: quick (~5 techniques, fast overview), standard (~20 techniques, balanced), deep (~50+ techniques, comprehensive).",
|
|
79
|
+
schema: {
|
|
80
|
+
url: z
|
|
81
|
+
.string()
|
|
82
|
+
.describe("Target URL (e.g., https://example.com)"),
|
|
83
|
+
depth: z
|
|
84
|
+
.enum(["quick", "standard", "deep"])
|
|
85
|
+
.optional()
|
|
86
|
+
.describe("Scan depth: quick (~5 techniques), standard (~20), deep (50+). Default: quick"),
|
|
87
|
+
},
|
|
88
|
+
async execute(args, ctx) {
|
|
89
|
+
let url = args.url;
|
|
90
|
+
if (!url.startsWith("http"))
|
|
91
|
+
url = `https://${url}`;
|
|
92
|
+
const depth = args.depth ?? "quick";
|
|
93
|
+
const { host, domain, port } = parseTarget(url);
|
|
94
|
+
const allResults = [];
|
|
95
|
+
const called = new Set();
|
|
96
|
+
const runBatch = async (calls) => {
|
|
97
|
+
const filtered = calls.filter((c) => !called.has(c.name));
|
|
98
|
+
for (const c of filtered)
|
|
99
|
+
called.add(c.name);
|
|
100
|
+
if (filtered.length === 0)
|
|
101
|
+
return;
|
|
102
|
+
const results = await callToolsParallel(filtered, ctx);
|
|
103
|
+
allResults.push(...results);
|
|
104
|
+
};
|
|
105
|
+
// ── Quick (~5 techniques) ──
|
|
106
|
+
await runBatch(QUICK_CALLS(url, host, domain, port));
|
|
107
|
+
if (depth === "quick") {
|
|
108
|
+
return buildCompositeResponse("recon", allResults, {
|
|
109
|
+
depth,
|
|
110
|
+
target: url,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// ── Standard (~20 techniques) ──
|
|
114
|
+
await runBatch(STANDARD_CALLS(url, host, domain, port));
|
|
115
|
+
if (depth === "standard") {
|
|
116
|
+
return buildCompositeResponse("recon", allResults, {
|
|
117
|
+
depth,
|
|
118
|
+
target: url,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// ── Deep (~50+ techniques, 3 sequential batches) ──
|
|
122
|
+
await runBatch(DEEP_BATCH_1(url, host, port));
|
|
123
|
+
await runBatch(DEEP_BATCH_2(url, host, domain, port));
|
|
124
|
+
await runBatch(DEEP_BATCH_3(url, host, domain, port));
|
|
125
|
+
return buildCompositeResponse("recon", allResults, {
|
|
126
|
+
depth,
|
|
127
|
+
target: url,
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=recon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recon.js","sourceRoot":"","sources":["../../src/composite/recon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,GAEZ,MAAM,cAAc,CAAC;AAEtB,+BAA+B;AAE/B,MAAM,WAAW,GAAG,CAClB,GAAW,EACX,IAAY,EACZ,MAAc,EACd,IAAY,EAC4C,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACnC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;CACvD,CAAC;AAEF,oCAAoC;AAEpC,MAAM,cAAc,GAAG,CACrB,GAAW,EACX,IAAY,EACZ,MAAc,EACd,IAAY,EAC4C,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACpC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC3C,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAClC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IACtC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;CACvC,CAAC;AAEF,6BAA6B;AAE7B,MAAM,YAAY,GAAG,CACnB,GAAW,EACX,IAAY,EACZ,IAAY,EAC4C,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACjD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACvC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACpC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC9C,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC7C,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACnC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC7C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;CACrD,CAAC;AAEF,6BAA6B;AAE7B,MAAM,YAAY,GAAG,CACnB,GAAW,EACX,IAAY,EACZ,MAAc,EACd,IAAY,EAC4C,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IAC/C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAClC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACxC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;CAC5C,CAAC;AAEF,4BAA4B;AAE5B,MAAM,YAAY,GAAG,CACnB,GAAW,EACX,IAAY,EACZ,MAAc,EACd,IAAY,EAC4C,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAC9C,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAChD,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC7C,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IACrD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;CACzC,CAAC;AAEF,+BAA+B;AAE/B,MAAM,CAAC,MAAM,SAAS,GAAY;IAChC,IAAI,EAAE,OAAO;IACb,WAAW,EACT,uTAAuT;IACzT,MAAM,EAAE;QACN,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,CAAC,wCAAwC,CAAC;QACrD,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;aACnC,QAAQ,EAAE;aACV,QAAQ,CACP,+EAA+E,CAChF;KACJ;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,GAAG,GAAG,WAAW,GAAG,EAAE,CAAC;QAEpD,MAAM,KAAK,GAAI,IAAI,CAAC,KAAgB,IAAI,OAAO,CAAC;QAChD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAEhD,MAAM,UAAU,GAAoB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjC,MAAM,QAAQ,GAAG,KAAK,EACpB,KAA6D,EAC9C,EAAE;YACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAClC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,8BAA8B;QAC9B,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE;gBACjD,KAAK;gBACL,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE;gBACjD,KAAK;gBACL,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAEtD,OAAO,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE;YACjD,KAAK;YACL,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-dns.d.ts","sourceRoot":"","sources":["../../src/composite/scan-dns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,WAAW,EAAE,OAuDzB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callTool, callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
export const scanDnsTool = {
|
|
4
|
+
name: "scan_dns",
|
|
5
|
+
description: "Comprehensive DNS intelligence: full record enumeration, email infrastructure (MX/SPF/DKIM/DMARC), SaaS inventory from TXT records, nameserver fingerprinting, MTA-STS/DANE analysis, subdomain takeover detection, and reverse DNS. 7 techniques in a single call.",
|
|
6
|
+
schema: {
|
|
7
|
+
domain: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("Target domain"),
|
|
10
|
+
},
|
|
11
|
+
async execute(args, ctx) {
|
|
12
|
+
const domain = args.domain;
|
|
13
|
+
// Phase 1: Run 6 DNS tools in parallel
|
|
14
|
+
const phase1Results = await callToolsParallel([
|
|
15
|
+
{ name: "dns_records", args: { domain } },
|
|
16
|
+
{ name: "dns_email", args: { domain } },
|
|
17
|
+
{ name: "dns_saas", args: { domain } },
|
|
18
|
+
{ name: "dns_server_fp", args: { domain } },
|
|
19
|
+
{ name: "dns_mta_sts", args: { domain } },
|
|
20
|
+
{ name: "dns_takeover", args: { domain } },
|
|
21
|
+
], ctx);
|
|
22
|
+
// Phase 2: Extract A record IP from dns_records result, then do reverse DNS
|
|
23
|
+
const allResults = [...phase1Results];
|
|
24
|
+
const dnsRecordsResult = phase1Results.find((r) => r.tool === "dns_records");
|
|
25
|
+
if (dnsRecordsResult?.ok && dnsRecordsResult.data) {
|
|
26
|
+
const data = dnsRecordsResult.data;
|
|
27
|
+
// Try to extract an IP address from the A records
|
|
28
|
+
let ip;
|
|
29
|
+
// Common shapes: data.A could be an array of strings or objects with address field
|
|
30
|
+
const records = data.records;
|
|
31
|
+
const aRecords = data.A ?? data.a ?? records?.A;
|
|
32
|
+
if (Array.isArray(aRecords) && aRecords.length > 0) {
|
|
33
|
+
const first = aRecords[0];
|
|
34
|
+
ip = typeof first === "string" ? first : first?.address ?? first?.ip ?? first?.value;
|
|
35
|
+
}
|
|
36
|
+
if (ip) {
|
|
37
|
+
const reverseResult = await callTool("dns_reverse", { ip }, ctx);
|
|
38
|
+
allResults.push(reverseResult);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return buildCompositeResponse("scan_dns", allResults);
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=scan-dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-dns.js","sourceRoot":"","sources":["../../src/composite/scan-dns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,qQAAqQ;IACvQ,MAAM,EAAE;QACN,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,CAAC,eAAe,CAAC;KAC7B;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAC;QAErC,uCAAuC;QACvC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C;YACE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;YACzC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;YACvC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;YAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;YACzC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE;SAC3C,EACD,GAAG,CACJ,CAAC;QAEF,4EAA4E;QAC5E,MAAM,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;QAEtC,MAAM,gBAAgB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAC7E,IAAI,gBAAgB,EAAE,EAAE,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAA+B,CAAC;YAE9D,kDAAkD;YAClD,IAAI,EAAsB,CAAC;YAE3B,mFAAmF;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,OAA8C,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;YAChD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC1B,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,IAAI,KAAK,EAAE,KAAK,CAAC;YACvF,CAAC;YAED,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBACjE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,sBAAsB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-http.d.ts","sourceRoot":"","sources":["../../src/composite/scan-http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,YAAY,EAAE,OAiF1B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callTool, callToolsParallel, buildCompositeResponse, parseTarget } from "./helpers.js";
|
|
3
|
+
export const scanHttpTool = {
|
|
4
|
+
name: "scan_http",
|
|
5
|
+
description: "Comprehensive HTTP and web fingerprinting: header ordering, favicon hash, ETag analysis, error pages, cookies, HTTP methods, CORS, compression, caching, security headers, timing, redirect chains, web technology detection, analytics, source maps, API discovery, CMS/framework/ecommerce detection, and HTTP/2 analysis. ~29 techniques with smart skipping.",
|
|
6
|
+
schema: {
|
|
7
|
+
url: z.string().describe("Target URL for HTTP fingerprinting"),
|
|
8
|
+
},
|
|
9
|
+
async execute(args, ctx) {
|
|
10
|
+
const url = args.url;
|
|
11
|
+
const { host, port } = parseTarget(url);
|
|
12
|
+
// ── Phase 1: baseline headers ──
|
|
13
|
+
const phase1 = await callTool("http_headers", { url }, ctx);
|
|
14
|
+
// ── Phase 2: determine conditional tools based on phase 1 headers ──
|
|
15
|
+
const phase2Calls = [
|
|
16
|
+
// Always-include HTTP tools
|
|
17
|
+
{ name: "http_multi_fingerprint", args: { url } },
|
|
18
|
+
{ name: "http_favicon", args: { url } },
|
|
19
|
+
{ name: "http_etag", args: { url } },
|
|
20
|
+
{ name: "http_errors", args: { url } },
|
|
21
|
+
{ name: "http_cookies", args: { url } },
|
|
22
|
+
{ name: "http_methods", args: { url } },
|
|
23
|
+
{ name: "http_cors", args: { url } },
|
|
24
|
+
{ name: "http_compression", args: { url } },
|
|
25
|
+
{ name: "http_cache", args: { url } },
|
|
26
|
+
{ name: "http_security", args: { url } },
|
|
27
|
+
{ name: "http_timing", args: { url } },
|
|
28
|
+
{ name: "http_redirect", args: { url } },
|
|
29
|
+
{ name: "http_keepalive", args: { url } },
|
|
30
|
+
{ name: "http_resource_hints", args: { url } },
|
|
31
|
+
// Web fingerprinting tools
|
|
32
|
+
{ name: "web_tech", args: { url } },
|
|
33
|
+
{ name: "web_analytics", args: { url } },
|
|
34
|
+
{ name: "web_sourcemaps", args: { url } },
|
|
35
|
+
{ name: "web_api_discovery", args: { url } },
|
|
36
|
+
{ name: "web_sri", args: { url } },
|
|
37
|
+
{ name: "web_websocket", args: { url } },
|
|
38
|
+
{ name: "web_graphql", args: { url } },
|
|
39
|
+
// App detection tools
|
|
40
|
+
{ name: "app_cms", args: { url } },
|
|
41
|
+
{ name: "app_framework", args: { url } },
|
|
42
|
+
{ name: "app_ecommerce", args: { url } },
|
|
43
|
+
// HTTP/2 tools
|
|
44
|
+
{ name: "h2_detect", args: { url } },
|
|
45
|
+
{ name: "h2_server_fp", args: { host, port } },
|
|
46
|
+
// Timing baseline
|
|
47
|
+
{ name: "timing_baseline", args: { url } },
|
|
48
|
+
];
|
|
49
|
+
// Conditionally include server-timing and NEL tools based on phase 1 headers
|
|
50
|
+
if (phase1.ok && phase1.data && typeof phase1.data === "object") {
|
|
51
|
+
const data = phase1.data;
|
|
52
|
+
// Check for server-timing header (may be nested under a "headers" key or at top level)
|
|
53
|
+
const headers = (data.headers ?? data);
|
|
54
|
+
const headerKeys = Object.keys(headers).map((k) => k.toLowerCase());
|
|
55
|
+
if (headerKeys.includes("server-timing")) {
|
|
56
|
+
phase2Calls.push({ name: "http_server_timing", args: { url } });
|
|
57
|
+
}
|
|
58
|
+
if (headerKeys.includes("nel") || headerKeys.includes("report-to")) {
|
|
59
|
+
phase2Calls.push({ name: "http_nel", args: { url } });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ── Phase 2: run all tools in parallel ──
|
|
63
|
+
const phase2Results = await callToolsParallel(phase2Calls, ctx);
|
|
64
|
+
// ── Combine all results ──
|
|
65
|
+
return buildCompositeResponse("scan_http", [phase1, ...phase2Results]);
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=scan-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-http.js","sourceRoot":"","sources":["../../src/composite/scan-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-paths.d.ts","sourceRoot":"","sources":["../../src/composite/scan-paths.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,aAAa,EAAE,OAuC3B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
export const scanPathsTool = {
|
|
4
|
+
name: "scan_paths",
|
|
5
|
+
description: "Path intelligence: sensitive file/directory probing (200+ paths across 11 categories), robots.txt/sitemap/security.txt parsing, version control and secret exposure detection, debug endpoint discovery with severity ratings, and API version probing. 5 techniques in a single call.",
|
|
6
|
+
schema: {
|
|
7
|
+
url: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("Base URL for path probing"),
|
|
10
|
+
categories: z
|
|
11
|
+
.array(z.string())
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("path_sensitive categories to probe (default: all 11 categories)"),
|
|
14
|
+
},
|
|
15
|
+
async execute(args, ctx) {
|
|
16
|
+
const url = args.url;
|
|
17
|
+
const categories = args.categories;
|
|
18
|
+
const sensitiveArgs = { url };
|
|
19
|
+
if (categories !== undefined) {
|
|
20
|
+
sensitiveArgs.categories = categories;
|
|
21
|
+
}
|
|
22
|
+
const results = await callToolsParallel([
|
|
23
|
+
{ name: "path_sensitive", args: sensitiveArgs },
|
|
24
|
+
{ name: "path_robots", args: { url } },
|
|
25
|
+
{ name: "path_git_leak", args: { url } },
|
|
26
|
+
{ name: "path_debug", args: { url } },
|
|
27
|
+
{ name: "path_api_version", args: { url } },
|
|
28
|
+
], ctx);
|
|
29
|
+
return buildCompositeResponse("scan_paths", results);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=scan-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-paths.js","sourceRoot":"","sources":["../../src/composite/scan-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,wRAAwR;IAC1R,MAAM,EAAE;QACN,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,CAAC,2BAA2B,CAAC;QACxC,UAAU,EAAE,CAAC;aACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CAAC,iEAAiE,CAAC;KAC/E;IAED,KAAK,CAAC,OAAO,CACX,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAkC,CAAC;QAE3D,MAAM,aAAa,GAA4B,EAAE,GAAG,EAAE,CAAC;QACvD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;QACxC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC;YACE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE;YAC/C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;YACtC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;YACxC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;YACrC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;SAC5C,EACD,GAAG,CACJ,CAAC;QAEF,OAAO,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-ports.d.ts","sourceRoot":"","sources":["../../src/composite/scan-ports.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAK1E,eAAO,MAAM,aAAa,EAAE,OAkG3B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callTool, callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
const DEFAULT_PORTS = [21, 22, 25, 80, 443, 3306, 3389, 5432, 5900, 6379, 8080, 8443];
|
|
4
|
+
export const scanPortsTool = {
|
|
5
|
+
name: "scan_ports",
|
|
6
|
+
description: "TCP port scanning with banner grabbing and automatic service detection. Probes specified ports, reads initial banners, detects protocols (SSH, MySQL, Redis, FTP, SMTP, HTTP, PostgreSQL, VNC, RDP), and runs targeted service fingerprinting on detected services.",
|
|
7
|
+
schema: {
|
|
8
|
+
host: z.string().describe("Target host"),
|
|
9
|
+
ports: z
|
|
10
|
+
.array(z.number())
|
|
11
|
+
.optional()
|
|
12
|
+
.describe("Ports to scan (default: common service ports)"),
|
|
13
|
+
},
|
|
14
|
+
async execute(args, ctx) {
|
|
15
|
+
const host = args.host;
|
|
16
|
+
const ports = args.ports ?? DEFAULT_PORTS;
|
|
17
|
+
// ── Step 1: TCP probe with banner grab ──
|
|
18
|
+
const probeResult = await callTool("tcp_probe", { host, ports }, ctx);
|
|
19
|
+
// ── Step 2: Detect services from banners and dispatch probes ──
|
|
20
|
+
const serviceCalls = [];
|
|
21
|
+
if (probeResult.ok && probeResult.data && typeof probeResult.data === "object") {
|
|
22
|
+
const data = probeResult.data;
|
|
23
|
+
const probes = (data.probes ?? []);
|
|
24
|
+
for (const probe of probes) {
|
|
25
|
+
if (!probe.open)
|
|
26
|
+
continue;
|
|
27
|
+
const banner = probe.banner ?? "";
|
|
28
|
+
const port = probe.port;
|
|
29
|
+
// SSH detection
|
|
30
|
+
if (banner.startsWith("SSH-")) {
|
|
31
|
+
serviceCalls.push({ name: "ssh_probe", args: { host, port } });
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
// SMTP detection
|
|
35
|
+
if (/^220[\s-]/.test(banner) && /smtp|mail/i.test(banner)) {
|
|
36
|
+
serviceCalls.push({ name: "smtp_probe", args: { host, port } });
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
// FTP detection
|
|
40
|
+
if (/^220[\s-]/.test(banner) && /ftp/i.test(banner)) {
|
|
41
|
+
serviceCalls.push({ name: "svc_ftp_probe", args: { host, port } });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// MySQL detection
|
|
45
|
+
if (port === 3306) {
|
|
46
|
+
serviceCalls.push({ name: "svc_mysql_probe", args: { host, port } });
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// PostgreSQL detection
|
|
50
|
+
if (port === 5432) {
|
|
51
|
+
serviceCalls.push({ name: "svc_postgres_probe", args: { host, port } });
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Redis detection
|
|
55
|
+
if (port === 6379 || /\+PONG|-NOAUTH/.test(banner)) {
|
|
56
|
+
serviceCalls.push({ name: "svc_redis_probe", args: { host, port } });
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// RDP detection
|
|
60
|
+
if (port === 3389) {
|
|
61
|
+
serviceCalls.push({ name: "svc_vnc_rdp_detect", args: { host, ports: [port] } });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// VNC detection
|
|
65
|
+
if (port === 5900 || port === 5901 || banner.startsWith("RFB")) {
|
|
66
|
+
serviceCalls.push({ name: "svc_vnc_rdp_detect", args: { host, ports: [port] } });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ── Step 3: Run all service probes in parallel ──
|
|
72
|
+
const serviceResults = serviceCalls.length > 0
|
|
73
|
+
? await callToolsParallel(serviceCalls, ctx)
|
|
74
|
+
: [];
|
|
75
|
+
// ── Combine results ──
|
|
76
|
+
return buildCompositeResponse("scan_ports", [probeResult, ...serviceResults]);
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=scan-ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-ports.js","sourceRoot":"","sources":["../../src/composite/scan-ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-services.d.ts","sourceRoot":"","sources":["../../src/composite/scan-services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AA4E1E,eAAO,MAAM,gBAAgB,EAAE,OA0D9B,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callToolsParallel, buildCompositeResponse } from "./helpers.js";
|
|
3
|
+
const PORT_SERVICE_MAP = {
|
|
4
|
+
3306: "mysql",
|
|
5
|
+
5432: "postgres",
|
|
6
|
+
6379: "redis",
|
|
7
|
+
21: "ftp",
|
|
8
|
+
22: "ssh",
|
|
9
|
+
25: "smtp",
|
|
10
|
+
587: "smtp",
|
|
11
|
+
3389: "vnc_rdp",
|
|
12
|
+
5900: "vnc_rdp",
|
|
13
|
+
5901: "vnc_rdp",
|
|
14
|
+
};
|
|
15
|
+
function buildServiceCalls(service, host, ports) {
|
|
16
|
+
switch (service) {
|
|
17
|
+
case "mysql":
|
|
18
|
+
return [{ name: "svc_mysql_probe", args: { host, port: ports?.[0] ?? 3306 } }];
|
|
19
|
+
case "postgres":
|
|
20
|
+
return [{ name: "svc_postgres_probe", args: { host, port: ports?.[0] ?? 5432 } }];
|
|
21
|
+
case "redis":
|
|
22
|
+
return [{ name: "svc_redis_probe", args: { host, port: ports?.[0] ?? 6379 } }];
|
|
23
|
+
case "ftp":
|
|
24
|
+
return [{ name: "svc_ftp_probe", args: { host, port: ports?.[0] ?? 21 } }];
|
|
25
|
+
case "vnc_rdp":
|
|
26
|
+
return [{ name: "svc_vnc_rdp_detect", args: { host, ports: ports ?? [3389, 5900, 5901] } }];
|
|
27
|
+
case "ssh": {
|
|
28
|
+
const sshPort = ports?.[0] ?? 22;
|
|
29
|
+
return [
|
|
30
|
+
{ name: "ssh_probe", args: { host, port: sshPort } },
|
|
31
|
+
{ name: "ssh_audit", args: { host, port: sshPort } },
|
|
32
|
+
{ name: "ssh_hostkey_lookup", args: { host, port: sshPort } },
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
case "smtp": {
|
|
36
|
+
const smtpPort = ports?.[0] ?? 25;
|
|
37
|
+
return [
|
|
38
|
+
{ name: "smtp_probe", args: { host, port: smtpPort } },
|
|
39
|
+
{ name: "smtp_tls", args: { host, port: smtpPort } },
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
case "iot":
|
|
43
|
+
return [{ name: "iot_probe", args: { host, ports: ports ?? [80, 443, 8080, 8443, 23, 161, 1883] } }];
|
|
44
|
+
case "all":
|
|
45
|
+
return [
|
|
46
|
+
...buildServiceCalls("mysql", host, ports),
|
|
47
|
+
...buildServiceCalls("postgres", host, ports),
|
|
48
|
+
...buildServiceCalls("redis", host, ports),
|
|
49
|
+
...buildServiceCalls("ftp", host, ports),
|
|
50
|
+
...buildServiceCalls("vnc_rdp", host, ports),
|
|
51
|
+
...buildServiceCalls("ssh", host, ports),
|
|
52
|
+
...buildServiceCalls("smtp", host, ports),
|
|
53
|
+
...buildServiceCalls("iot", host, ports),
|
|
54
|
+
];
|
|
55
|
+
default:
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export const scanServicesTool = {
|
|
60
|
+
name: "scan_services",
|
|
61
|
+
description: "Service-level fingerprinting for databases, caches, remote desktop, SSH, SMTP, and IoT. Supports auto-detection from port numbers or explicit service selection. Probes: MySQL, PostgreSQL, Redis, FTP, VNC/RDP, SSH (with full audit), SMTP (with TLS check), and IoT device detection.",
|
|
62
|
+
schema: {
|
|
63
|
+
host: z.string().describe("Target host"),
|
|
64
|
+
ports: z
|
|
65
|
+
.array(z.number())
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Specific ports to probe"),
|
|
68
|
+
service: z
|
|
69
|
+
.enum(["mysql", "postgres", "redis", "ftp", "vnc_rdp", "ssh", "smtp", "iot", "all"])
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Service to probe (default: auto-detect from ports, or 'all')"),
|
|
72
|
+
},
|
|
73
|
+
async execute(args, ctx) {
|
|
74
|
+
const host = args.host;
|
|
75
|
+
const ports = args.ports;
|
|
76
|
+
const service = args.service;
|
|
77
|
+
let calls;
|
|
78
|
+
if (service) {
|
|
79
|
+
// Explicit service selection
|
|
80
|
+
calls = buildServiceCalls(service, host, ports);
|
|
81
|
+
}
|
|
82
|
+
else if (ports && ports.length > 0) {
|
|
83
|
+
// Auto-detect services from port numbers
|
|
84
|
+
const detectedServices = new Set();
|
|
85
|
+
for (const port of ports) {
|
|
86
|
+
const svc = PORT_SERVICE_MAP[port];
|
|
87
|
+
if (svc)
|
|
88
|
+
detectedServices.add(svc);
|
|
89
|
+
}
|
|
90
|
+
if (detectedServices.size === 0) {
|
|
91
|
+
// No recognized ports — default to all
|
|
92
|
+
calls = buildServiceCalls("all", host, ports);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
calls = [];
|
|
96
|
+
for (const svc of detectedServices) {
|
|
97
|
+
// Filter ports relevant to this service
|
|
98
|
+
const relevantPorts = ports.filter((p) => PORT_SERVICE_MAP[p] === svc);
|
|
99
|
+
calls.push(...buildServiceCalls(svc, host, relevantPorts.length > 0 ? relevantPorts : undefined));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Neither service nor ports given — default to "all"
|
|
105
|
+
calls = buildServiceCalls("all", host, ports);
|
|
106
|
+
}
|
|
107
|
+
const results = await callToolsParallel(calls, ctx);
|
|
108
|
+
return buildCompositeResponse("scan_services", results);
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=scan-services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-services.js","sourceRoot":"","sources":["../../src/composite/scan-services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-tls.d.ts","sourceRoot":"","sources":["../../src/composite/scan-tls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAG1E,eAAO,MAAM,WAAW,EAAE,OAsCzB,CAAC"}
|