dns-security-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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +723 -0
  3. package/dist/blocklist/index.d.ts +3 -0
  4. package/dist/blocklist/index.d.ts.map +1 -0
  5. package/dist/blocklist/index.js +596 -0
  6. package/dist/blocklist/index.js.map +1 -0
  7. package/dist/ct/index.d.ts +3 -0
  8. package/dist/ct/index.d.ts.map +1 -0
  9. package/dist/ct/index.js +534 -0
  10. package/dist/ct/index.js.map +1 -0
  11. package/dist/data/dkim-selectors.d.ts +2 -0
  12. package/dist/data/dkim-selectors.d.ts.map +1 -0
  13. package/dist/data/dkim-selectors.js +60 -0
  14. package/dist/data/dkim-selectors.js.map +1 -0
  15. package/dist/data/dnsbl-lists.d.ts +8 -0
  16. package/dist/data/dnsbl-lists.d.ts.map +1 -0
  17. package/dist/data/dnsbl-lists.js +54 -0
  18. package/dist/data/dnsbl-lists.js.map +1 -0
  19. package/dist/data/takeover-fingerprints.d.ts +8 -0
  20. package/dist/data/takeover-fingerprints.d.ts.map +1 -0
  21. package/dist/data/takeover-fingerprints.js +84 -0
  22. package/dist/data/takeover-fingerprints.js.map +1 -0
  23. package/dist/data/tunneling-signatures.d.ts +17 -0
  24. package/dist/data/tunneling-signatures.d.ts.map +1 -0
  25. package/dist/data/tunneling-signatures.js +85 -0
  26. package/dist/data/tunneling-signatures.js.map +1 -0
  27. package/dist/dns/index.d.ts +3 -0
  28. package/dist/dns/index.d.ts.map +1 -0
  29. package/dist/dns/index.js +1211 -0
  30. package/dist/dns/index.js.map +1 -0
  31. package/dist/dnssec/index.d.ts +3 -0
  32. package/dist/dnssec/index.d.ts.map +1 -0
  33. package/dist/dnssec/index.js +1377 -0
  34. package/dist/dnssec/index.js.map +1 -0
  35. package/dist/domain/index.d.ts +3 -0
  36. package/dist/domain/index.d.ts.map +1 -0
  37. package/dist/domain/index.js +938 -0
  38. package/dist/domain/index.js.map +1 -0
  39. package/dist/email/index.d.ts +3 -0
  40. package/dist/email/index.d.ts.map +1 -0
  41. package/dist/email/index.js +1188 -0
  42. package/dist/email/index.js.map +1 -0
  43. package/dist/hijack/index.d.ts +3 -0
  44. package/dist/hijack/index.d.ts.map +1 -0
  45. package/dist/hijack/index.js +1117 -0
  46. package/dist/hijack/index.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +151 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/infra/index.d.ts +3 -0
  52. package/dist/infra/index.d.ts.map +1 -0
  53. package/dist/infra/index.js +797 -0
  54. package/dist/infra/index.js.map +1 -0
  55. package/dist/privacy/index.d.ts +3 -0
  56. package/dist/privacy/index.d.ts.map +1 -0
  57. package/dist/privacy/index.js +772 -0
  58. package/dist/privacy/index.js.map +1 -0
  59. package/dist/protocol/mcp-server.d.ts +4 -0
  60. package/dist/protocol/mcp-server.d.ts.map +1 -0
  61. package/dist/protocol/mcp-server.js +32 -0
  62. package/dist/protocol/mcp-server.js.map +1 -0
  63. package/dist/protocol/tools.d.ts +3 -0
  64. package/dist/protocol/tools.d.ts.map +1 -0
  65. package/dist/protocol/tools.js +29 -0
  66. package/dist/protocol/tools.js.map +1 -0
  67. package/dist/report/index.d.ts +3 -0
  68. package/dist/report/index.d.ts.map +1 -0
  69. package/dist/report/index.js +1167 -0
  70. package/dist/report/index.js.map +1 -0
  71. package/dist/threat/index.d.ts +3 -0
  72. package/dist/threat/index.d.ts.map +1 -0
  73. package/dist/threat/index.js +999 -0
  74. package/dist/threat/index.js.map +1 -0
  75. package/dist/tunnel/index.d.ts +3 -0
  76. package/dist/tunnel/index.d.ts.map +1 -0
  77. package/dist/tunnel/index.js +688 -0
  78. package/dist/tunnel/index.js.map +1 -0
  79. package/dist/types/index.d.ts +52 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. package/dist/types/index.js +8 -0
  82. package/dist/types/index.js.map +1 -0
  83. package/dist/typo/index.d.ts +3 -0
  84. package/dist/typo/index.d.ts.map +1 -0
  85. package/dist/typo/index.js +625 -0
  86. package/dist/typo/index.js.map +1 -0
  87. package/dist/utils/cache.d.ts +11 -0
  88. package/dist/utils/cache.d.ts.map +1 -0
  89. package/dist/utils/cache.js +35 -0
  90. package/dist/utils/cache.js.map +1 -0
  91. package/dist/utils/dns-client.d.ts +37 -0
  92. package/dist/utils/dns-client.d.ts.map +1 -0
  93. package/dist/utils/dns-client.js +359 -0
  94. package/dist/utils/dns-client.js.map +1 -0
  95. package/dist/utils/rate-limiter.d.ts +10 -0
  96. package/dist/utils/rate-limiter.d.ts.map +1 -0
  97. package/dist/utils/rate-limiter.js +35 -0
  98. package/dist/utils/rate-limiter.js.map +1 -0
  99. package/package.json +63 -0
@@ -0,0 +1,11 @@
1
+ export declare class TTLCache<T> {
2
+ private ttlMs;
3
+ private store;
4
+ constructor(ttlMs: number);
5
+ get(key: string): T | undefined;
6
+ set(key: string, value: T): void;
7
+ has(key: string): boolean;
8
+ clear(): void;
9
+ get size(): number;
10
+ }
11
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AACA,qBAAa,QAAQ,CAAC,CAAC;IAGT,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,KAAK,CAAoD;gBAE7C,KAAK,EAAE,MAAM;IAEjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAU/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIhC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAKjB;CACF"}
@@ -0,0 +1,35 @@
1
+ // Simple in-memory TTL cache
2
+ export class TTLCache {
3
+ ttlMs;
4
+ store = new Map();
5
+ constructor(ttlMs) {
6
+ this.ttlMs = ttlMs;
7
+ }
8
+ get(key) {
9
+ const entry = this.store.get(key);
10
+ if (!entry)
11
+ return undefined;
12
+ if (Date.now() > entry.expires) {
13
+ this.store.delete(key);
14
+ return undefined;
15
+ }
16
+ return entry.value;
17
+ }
18
+ set(key, value) {
19
+ this.store.set(key, { value, expires: Date.now() + this.ttlMs });
20
+ }
21
+ has(key) {
22
+ return this.get(key) !== undefined;
23
+ }
24
+ clear() {
25
+ this.store.clear();
26
+ }
27
+ get size() {
28
+ for (const [key, entry] of this.store) {
29
+ if (Date.now() > entry.expires)
30
+ this.store.delete(key);
31
+ }
32
+ return this.store.size;
33
+ }
34
+ }
35
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,MAAM,OAAO,QAAQ;IAGC;IAFZ,KAAK,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEjE,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAErC,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ import * as dns from "node:dns/promises";
2
+ import * as dnsPacket from "dns-packet";
3
+ import type { DnsRecord, DnsFlags } from "../types/index.js";
4
+ export declare function createResolver(server?: string): dns.Resolver;
5
+ export declare function resolveAll(domain: string, types?: string[], server?: string): Promise<DnsRecord[]>;
6
+ export declare function queryRaw(domain: string, type: string, server: string, port?: number, opts?: {
7
+ rd?: boolean;
8
+ cd?: boolean;
9
+ dnssec?: boolean;
10
+ }): Promise<{
11
+ answers: dnsPacket.Answer[];
12
+ authorities: dnsPacket.Answer[];
13
+ additionals: dnsPacket.Answer[];
14
+ flags: DnsFlags;
15
+ rcode: string;
16
+ }>;
17
+ export declare function queryTcp(domain: string, type: string, server: string, port?: number): Promise<dnsPacket.Answer[]>;
18
+ export declare function queryDoH(domain: string, type: string, dohServer?: string): Promise<{
19
+ answers: Array<{
20
+ name: string;
21
+ type: number;
22
+ TTL: number;
23
+ data: string;
24
+ }>;
25
+ }>;
26
+ export declare function queryDoT(domain: string, type: string, dotServer: string, port?: number): Promise<dnsPacket.Answer[]>;
27
+ export declare function reverseIp(ip: string): string;
28
+ export declare function isValidDomain(domain: string): boolean;
29
+ export declare function isValidIp(ip: string): boolean;
30
+ export declare function shannonEntropy(str: string): number;
31
+ export declare const PUBLIC_RESOLVERS: {
32
+ name: string;
33
+ ip: string;
34
+ location: string;
35
+ }[];
36
+ export declare const SUBDOMAIN_WORDLIST: string[];
37
+ //# sourceMappingURL=dns-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-client.d.ts","sourceRoot":"","sources":["../../src/utils/dns-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAKzC,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7D,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,QAAQ,CAI5D;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAM,EAAmE,EAChF,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,EAAE,CAAC,CAsEtB;AAID,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,SAAK,EACT,IAAI,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,OAAO,CAAC;IAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoE5I;AAID,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,SAAK,GACR,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAuD7B;AAID,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,SAAyC,GACjD,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAQxF;AAID,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,SAAM,GACT,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CA+C7B;AAID,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlD;AAcD,eAAO,MAAM,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAqB5E,CAAC;AAIF,eAAO,MAAM,kBAAkB,UA+B9B,CAAC"}
@@ -0,0 +1,359 @@
1
+ import * as dns from "node:dns/promises";
2
+ import * as dgram from "node:dgram";
3
+ import * as net from "node:net";
4
+ import * as tls from "node:tls";
5
+ import * as dnsPacket from "dns-packet";
6
+ // ─── Resolver Helpers ───
7
+ const DEFAULT_TIMEOUT = 5000;
8
+ export function createResolver(server) {
9
+ const resolver = new dns.Resolver();
10
+ if (server)
11
+ resolver.setServers([server]);
12
+ return resolver;
13
+ }
14
+ export async function resolveAll(domain, types = ["A", "AAAA", "MX", "TXT", "NS", "SOA", "CNAME", "SRV", "CAA"], server) {
15
+ const resolver = createResolver(server);
16
+ const records = [];
17
+ const tasks = types.map(async (type) => {
18
+ try {
19
+ switch (type.toUpperCase()) {
20
+ case "A": {
21
+ const res = await resolver.resolve4(domain, { ttl: true });
22
+ for (const r of res)
23
+ records.push({ name: domain, type: "A", ttl: r.ttl, data: r.address });
24
+ break;
25
+ }
26
+ case "AAAA": {
27
+ const res = await resolver.resolve6(domain, { ttl: true });
28
+ for (const r of res)
29
+ records.push({ name: domain, type: "AAAA", ttl: r.ttl, data: r.address });
30
+ break;
31
+ }
32
+ case "MX": {
33
+ const res = await resolver.resolveMx(domain);
34
+ for (const r of res)
35
+ records.push({ name: domain, type: "MX", ttl: 0, data: `${r.priority} ${r.exchange}` });
36
+ break;
37
+ }
38
+ case "TXT": {
39
+ const res = await resolver.resolveTxt(domain);
40
+ for (const r of res)
41
+ records.push({ name: domain, type: "TXT", ttl: 0, data: r.join("") });
42
+ break;
43
+ }
44
+ case "NS": {
45
+ const res = await resolver.resolveNs(domain);
46
+ for (const r of res)
47
+ records.push({ name: domain, type: "NS", ttl: 0, data: r });
48
+ break;
49
+ }
50
+ case "SOA": {
51
+ const r = await resolver.resolveSoa(domain);
52
+ records.push({ name: domain, type: "SOA", ttl: 0, data: `${r.nsname} ${r.hostmaster} ${r.serial} ${r.refresh} ${r.retry} ${r.expire} ${r.minttl}` });
53
+ break;
54
+ }
55
+ case "CNAME": {
56
+ const res = await resolver.resolveCname(domain);
57
+ for (const r of res)
58
+ records.push({ name: domain, type: "CNAME", ttl: 0, data: r });
59
+ break;
60
+ }
61
+ case "SRV": {
62
+ const res = await resolver.resolveSrv(domain);
63
+ for (const r of res)
64
+ records.push({ name: domain, type: "SRV", ttl: 0, data: `${r.priority} ${r.weight} ${r.port} ${r.name}` });
65
+ break;
66
+ }
67
+ case "CAA": {
68
+ const res = await resolver.resolveCaa(domain);
69
+ for (const r of res)
70
+ records.push({ name: domain, type: "CAA", ttl: 0, data: `${r.critical ? "128" : "0"} ${r.contactemail ?? r.contactphone ?? r.issue ?? r.issuewild ?? r.iodef ?? ""}` });
71
+ break;
72
+ }
73
+ case "PTR": {
74
+ const res = await resolver.resolvePtr(domain);
75
+ for (const r of res)
76
+ records.push({ name: domain, type: "PTR", ttl: 0, data: r });
77
+ break;
78
+ }
79
+ case "NAPTR": {
80
+ const res = await resolver.resolveNaptr(domain);
81
+ for (const r of res)
82
+ records.push({ name: domain, type: "NAPTR", ttl: 0, data: `${r.order} ${r.preference} "${r.flags}" "${r.service}" "${r.regexp}" ${r.replacement}` });
83
+ break;
84
+ }
85
+ }
86
+ }
87
+ catch {
88
+ // Record type not found — skip
89
+ }
90
+ });
91
+ await Promise.allSettled(tasks);
92
+ return records;
93
+ }
94
+ // ─── Raw DNS Queries via dns-packet + UDP ───
95
+ export async function queryRaw(domain, type, server, port = 53, opts) {
96
+ const rd = opts?.rd ?? true;
97
+ const cd = opts?.cd ?? false;
98
+ const question = {
99
+ type: type,
100
+ name: domain,
101
+ class: "IN",
102
+ };
103
+ const additionals = [];
104
+ if (opts?.dnssec) {
105
+ additionals.push({
106
+ type: "OPT",
107
+ name: ".",
108
+ udpPayloadSize: 4096,
109
+ flags: dnsPacket.DNSSEC_OK,
110
+ options: [],
111
+ });
112
+ }
113
+ const buf = dnsPacket.encode({
114
+ type: "query",
115
+ id: Math.floor(Math.random() * 65535),
116
+ flags: (rd ? dnsPacket.RECURSION_DESIRED : 0) | (cd ? dnsPacket.CHECKING_DISABLED : 0),
117
+ questions: [question],
118
+ additionals: additionals.length > 0 ? additionals : undefined,
119
+ });
120
+ return new Promise((resolve, reject) => {
121
+ const socket = dgram.createSocket("udp4");
122
+ const timer = setTimeout(() => {
123
+ socket.close();
124
+ reject(new Error(`DNS query timeout: ${domain} ${type} @${server}`));
125
+ }, DEFAULT_TIMEOUT);
126
+ socket.on("message", (msg) => {
127
+ clearTimeout(timer);
128
+ socket.close();
129
+ try {
130
+ const res = dnsPacket.decode(msg);
131
+ resolve({
132
+ answers: (res.answers ?? []),
133
+ authorities: (res.authorities ?? []),
134
+ additionals: (res.additionals ?? []),
135
+ rcode: rcodeToString(res.rcode ?? "NOERROR"),
136
+ flags: {
137
+ authoritative: !!(res.flags & dnsPacket.AUTHORITATIVE_ANSWER),
138
+ truncated: !!(res.flags & dnsPacket.TRUNCATED_RESPONSE),
139
+ recursionDesired: !!(res.flags & dnsPacket.RECURSION_DESIRED),
140
+ recursionAvailable: !!(res.flags & dnsPacket.RECURSION_AVAILABLE),
141
+ authenticatedData: !!(res.flags & dnsPacket.AUTHENTIC_DATA),
142
+ checkingDisabled: !!(res.flags & dnsPacket.CHECKING_DISABLED),
143
+ },
144
+ });
145
+ }
146
+ catch (err) {
147
+ reject(err);
148
+ }
149
+ });
150
+ socket.on("error", (err) => {
151
+ clearTimeout(timer);
152
+ socket.close();
153
+ reject(err);
154
+ });
155
+ socket.send(buf, 0, buf.length, port, server);
156
+ });
157
+ }
158
+ // ─── TCP DNS Query (for AXFR, large responses) ───
159
+ export async function queryTcp(domain, type, server, port = 53) {
160
+ const buf = dnsPacket.encode({
161
+ type: "query",
162
+ id: Math.floor(Math.random() * 65535),
163
+ flags: 0,
164
+ questions: [{ type: type, name: domain, class: "IN" }],
165
+ });
166
+ // TCP DNS: 2-byte length prefix
167
+ const lenBuf = Buffer.alloc(2);
168
+ lenBuf.writeUInt16BE(buf.length, 0);
169
+ return new Promise((resolve, reject) => {
170
+ const socket = net.createConnection(port, server);
171
+ const chunks = [];
172
+ const timer = setTimeout(() => {
173
+ socket.destroy();
174
+ reject(new Error(`TCP DNS timeout: ${domain} ${type} @${server}`));
175
+ }, DEFAULT_TIMEOUT * 2);
176
+ socket.on("connect", () => {
177
+ socket.write(lenBuf);
178
+ socket.write(buf);
179
+ });
180
+ socket.on("data", (chunk) => {
181
+ chunks.push(chunk);
182
+ });
183
+ socket.on("end", () => {
184
+ clearTimeout(timer);
185
+ try {
186
+ const data = Buffer.concat(chunks);
187
+ const allAnswers = [];
188
+ let offset = 0;
189
+ while (offset + 2 < data.length) {
190
+ const len = data.readUInt16BE(offset);
191
+ offset += 2;
192
+ if (offset + len > data.length)
193
+ break;
194
+ const msg = data.subarray(offset, offset + len);
195
+ offset += len;
196
+ const res = dnsPacket.decode(msg);
197
+ if (res.answers)
198
+ allAnswers.push(...res.answers);
199
+ }
200
+ resolve(allAnswers);
201
+ }
202
+ catch (err) {
203
+ reject(err);
204
+ }
205
+ });
206
+ socket.on("error", (err) => {
207
+ clearTimeout(timer);
208
+ reject(err);
209
+ });
210
+ });
211
+ }
212
+ // ─── DNS-over-HTTPS (DoH) ───
213
+ export async function queryDoH(domain, type, dohServer = "https://cloudflare-dns.com/dns-query") {
214
+ const url = `${dohServer}?name=${encodeURIComponent(domain)}&type=${encodeURIComponent(type)}`;
215
+ const res = await fetch(url, {
216
+ headers: { Accept: "application/dns-json" },
217
+ signal: AbortSignal.timeout(DEFAULT_TIMEOUT),
218
+ });
219
+ if (!res.ok)
220
+ throw new Error(`DoH error: ${res.status} ${res.statusText}`);
221
+ return res.json();
222
+ }
223
+ // ─── DNS-over-TLS (DoT) ───
224
+ export async function queryDoT(domain, type, dotServer, port = 853) {
225
+ const buf = dnsPacket.encode({
226
+ type: "query",
227
+ id: Math.floor(Math.random() * 65535),
228
+ flags: dnsPacket.RECURSION_DESIRED,
229
+ questions: [{ type: type, name: domain, class: "IN" }],
230
+ });
231
+ const lenBuf = Buffer.alloc(2);
232
+ lenBuf.writeUInt16BE(buf.length, 0);
233
+ return new Promise((resolve, reject) => {
234
+ const socket = tls.connect(port, dotServer, { servername: dotServer });
235
+ const chunks = [];
236
+ const timer = setTimeout(() => {
237
+ socket.destroy();
238
+ reject(new Error(`DoT timeout: ${domain} ${type} @${dotServer}`));
239
+ }, DEFAULT_TIMEOUT);
240
+ socket.on("secureConnect", () => {
241
+ socket.write(lenBuf);
242
+ socket.write(buf);
243
+ });
244
+ socket.on("data", (chunk) => {
245
+ chunks.push(chunk);
246
+ });
247
+ socket.on("end", () => {
248
+ clearTimeout(timer);
249
+ try {
250
+ const data = Buffer.concat(chunks);
251
+ if (data.length < 2) {
252
+ resolve([]);
253
+ return;
254
+ }
255
+ const len = data.readUInt16BE(0);
256
+ const msg = data.subarray(2, 2 + len);
257
+ const res = dnsPacket.decode(msg);
258
+ resolve((res.answers ?? []));
259
+ }
260
+ catch (err) {
261
+ reject(err);
262
+ }
263
+ });
264
+ socket.on("error", (err) => {
265
+ clearTimeout(timer);
266
+ reject(err);
267
+ });
268
+ });
269
+ }
270
+ // ─── Utility Helpers ───
271
+ export function reverseIp(ip) {
272
+ return ip.split(".").reverse().join(".");
273
+ }
274
+ export function isValidDomain(domain) {
275
+ return /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/.test(domain);
276
+ }
277
+ export function isValidIp(ip) {
278
+ return /^(\d{1,3}\.){3}\d{1,3}$/.test(ip) && ip.split(".").every((o) => parseInt(o) <= 255);
279
+ }
280
+ export function shannonEntropy(str) {
281
+ if (str.length === 0)
282
+ return 0;
283
+ const freq = new Map();
284
+ for (const ch of str)
285
+ freq.set(ch, (freq.get(ch) ?? 0) + 1);
286
+ let entropy = 0;
287
+ for (const count of freq.values()) {
288
+ const p = count / str.length;
289
+ entropy -= p * Math.log2(p);
290
+ }
291
+ return entropy;
292
+ }
293
+ function rcodeToString(rcode) {
294
+ if (typeof rcode === "string")
295
+ return rcode;
296
+ const codes = {
297
+ 0: "NOERROR", 1: "FORMERR", 2: "SERVFAIL", 3: "NXDOMAIN",
298
+ 4: "NOTIMP", 5: "REFUSED", 6: "YXDOMAIN", 7: "YXRRSET",
299
+ 8: "NXRRSET", 9: "NOTAUTH", 10: "NOTZONE",
300
+ };
301
+ return codes[rcode] ?? `RCODE_${rcode}`;
302
+ }
303
+ // ─── Public DNS Resolvers ───
304
+ export const PUBLIC_RESOLVERS = [
305
+ { name: "Google", ip: "8.8.8.8", location: "US" },
306
+ { name: "Google Secondary", ip: "8.8.4.4", location: "US" },
307
+ { name: "Cloudflare", ip: "1.1.1.1", location: "US" },
308
+ { name: "Cloudflare Secondary", ip: "1.0.0.1", location: "US" },
309
+ { name: "Quad9", ip: "9.9.9.9", location: "US" },
310
+ { name: "OpenDNS", ip: "208.67.222.222", location: "US" },
311
+ { name: "OpenDNS Secondary", ip: "208.67.220.220", location: "US" },
312
+ { name: "Comodo", ip: "8.26.56.26", location: "US" },
313
+ { name: "CleanBrowsing", ip: "185.228.168.9", location: "EU" },
314
+ { name: "AdGuard", ip: "94.140.14.14", location: "EU" },
315
+ { name: "Yandex", ip: "77.88.8.8", location: "RU" },
316
+ { name: "Ali DNS", ip: "223.5.5.5", location: "CN" },
317
+ { name: "114DNS", ip: "114.114.114.114", location: "CN" },
318
+ { name: "Verisign", ip: "64.6.64.6", location: "US" },
319
+ { name: "Hurricane Electric", ip: "74.82.42.42", location: "US" },
320
+ { name: "Freenom World", ip: "80.80.80.80", location: "EU" },
321
+ { name: "UncensoredDNS", ip: "91.239.100.100", location: "DK" },
322
+ { name: "DNS.WATCH", ip: "84.200.69.80", location: "DE" },
323
+ { name: "SafeDNS", ip: "195.46.39.39", location: "RU" },
324
+ { name: "CIRA Shield", ip: "149.112.121.10", location: "CA" },
325
+ ];
326
+ // ─── Common subdomain wordlist (top 200) ───
327
+ export const SUBDOMAIN_WORDLIST = [
328
+ "www", "mail", "ftp", "localhost", "webmail", "smtp", "pop", "ns1", "ns2",
329
+ "ns3", "ns4", "dns", "dns1", "dns2", "api", "dev", "staging", "stg",
330
+ "test", "beta", "alpha", "demo", "app", "apps", "admin", "portal",
331
+ "blog", "shop", "store", "m", "mobile", "static", "assets", "cdn",
332
+ "media", "img", "images", "video", "vpn", "remote", "gateway", "gw",
333
+ "proxy", "cache", "web", "web1", "web2", "server", "server1", "server2",
334
+ "db", "database", "mysql", "postgres", "redis", "mongo", "elastic",
335
+ "search", "elasticsearch", "kibana", "grafana", "prometheus", "monitor",
336
+ "monitoring", "status", "health", "docs", "doc", "wiki", "help",
337
+ "support", "forum", "community", "git", "gitlab", "github", "bitbucket",
338
+ "ci", "cd", "jenkins", "travis", "drone", "auth", "login", "sso",
339
+ "oauth", "id", "identity", "accounts", "account", "dashboard", "panel",
340
+ "cp", "cpanel", "whm", "plesk", "cloud", "aws", "s3", "storage",
341
+ "backup", "bak", "old", "new", "v1", "v2", "api2", "rest", "graphql",
342
+ "ws", "wss", "socket", "realtime", "chat", "irc", "xmpp", "calendar",
343
+ "crm", "erp", "hr", "finance", "pay", "payment", "billing", "invoice",
344
+ "secure", "ssl", "tls", "https", "mx", "mx1", "mx2", "relay",
345
+ "outbound", "inbound", "internal", "private", "public", "ext",
346
+ "external", "partner", "client", "customer", "vendor", "corp",
347
+ "corporate", "office", "exchange", "autodiscover", "lyncdiscover",
348
+ "sip", "meet", "conference", "webex", "zoom", "teams", "slack",
349
+ "jira", "confluence", "notion", "trello", "asana", "redmine",
350
+ "bugzilla", "mantis", "nagios", "zabbix", "prtg", "splunk",
351
+ "siem", "log", "logs", "syslog", "audit", "analytics",
352
+ "tracking", "pixel", "ads", "ad", "marketing", "email",
353
+ "newsletter", "list", "lists", "subscribe", "unsubscribe",
354
+ "report", "reports", "data", "bigdata", "spark", "hadoop",
355
+ "kafka", "rabbit", "mq", "queue", "worker", "job", "jobs",
356
+ "cron", "scheduler", "task", "tasks", "sandbox", "lab",
357
+ "stage", "uat", "qa", "prod", "production", "live",
358
+ ];
359
+ //# sourceMappingURL=dns-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-client.js","sourceRoot":"","sources":["../../src/utils/dns-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class RateLimiter {
2
+ private minDelayMs;
3
+ private lastRequest;
4
+ private queue;
5
+ private processing;
6
+ constructor(minDelayMs: number);
7
+ acquire(): Promise<void>;
8
+ private processQueue;
9
+ }
10
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AACA,qBAAa,WAAW;IAKV,OAAO,CAAC,UAAU;IAJ9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,UAAU,CAAS;gBAEP,UAAU,EAAE,MAAM;IAEhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOhB,YAAY;CAc3B"}
@@ -0,0 +1,35 @@
1
+ // Queue-based rate limiter — ensures minimum delay between requests
2
+ export class RateLimiter {
3
+ minDelayMs;
4
+ lastRequest = 0;
5
+ queue = [];
6
+ processing = false;
7
+ constructor(minDelayMs) {
8
+ this.minDelayMs = minDelayMs;
9
+ }
10
+ async acquire() {
11
+ return new Promise((resolve) => {
12
+ this.queue.push(resolve);
13
+ if (!this.processing)
14
+ this.processQueue();
15
+ });
16
+ }
17
+ async processQueue() {
18
+ this.processing = true;
19
+ while (this.queue.length > 0) {
20
+ const now = Date.now();
21
+ const elapsed = now - this.lastRequest;
22
+ if (elapsed < this.minDelayMs) {
23
+ await sleep(this.minDelayMs - elapsed);
24
+ }
25
+ this.lastRequest = Date.now();
26
+ const resolve = this.queue.shift();
27
+ resolve?.();
28
+ }
29
+ this.processing = false;
30
+ }
31
+ }
32
+ function sleep(ms) {
33
+ return new Promise((r) => setTimeout(r, ms));
34
+ }
35
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,OAAO,WAAW;IAKF;IAJZ,WAAW,GAAG,CAAC,CAAC;IAChB,KAAK,GAAmB,EAAE,CAAC;IAC3B,UAAU,GAAG,KAAK,CAAC;IAE3B,YAAoB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAE1C,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;YACvC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "dns-security-mcp",
3
+ "version": "0.1.0",
4
+ "description": "DNS security intelligence MCP server — 104 tools for DNSSEC validation, hijacking detection, tunneling analysis, typosquatting, email security, certificate transparency, blocklist checking, infrastructure audit. 100% local, zero external API calls required.",
5
+ "type": "module",
6
+ "bin": {
7
+ "dns-security-mcp": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist/"
11
+ ],
12
+ "scripts": {
13
+ "dev": "bun --watch run src/index.ts",
14
+ "build": "tsc -p tsconfig.build.json",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "dns",
21
+ "dns-security",
22
+ "dnssec",
23
+ "dns-hijacking",
24
+ "dns-tunneling",
25
+ "typosquatting",
26
+ "subdomain-takeover",
27
+ "email-security",
28
+ "spf",
29
+ "dkim",
30
+ "dmarc",
31
+ "certificate-transparency",
32
+ "blocklist",
33
+ "dnsbl",
34
+ "dns-privacy",
35
+ "doh",
36
+ "dot",
37
+ "threat-intelligence",
38
+ "cybersecurity",
39
+ "security",
40
+ "infosec",
41
+ "ai",
42
+ "ai-agent",
43
+ "claude",
44
+ "llm"
45
+ ],
46
+ "author": "Orhan Yildirim <contact@orhanyildirim.us> (https://orhanyildirim.us)",
47
+ "license": "MIT",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/badchars/dns-security-mcp.git"
51
+ },
52
+ "homepage": "https://www.npmjs.com/package/dns-security-mcp",
53
+ "dependencies": {
54
+ "@modelcontextprotocol/sdk": "^1.12.1",
55
+ "dns-packet": "^5.6.1",
56
+ "zod": "^3.24.4"
57
+ },
58
+ "devDependencies": {
59
+ "@types/bun": "^1.3.10",
60
+ "@types/node": "^22.15.3",
61
+ "typescript": "^5.8.2"
62
+ }
63
+ }