{"_id":"@bobfrankston/dnslookup","_rev":"5-2204ab0649367681823e63812fe03253","name":"@bobfrankston/dnslookup","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.1":{"name":"@bobfrankston/dnslookup","version":"1.0.1","keywords":["dns","lookup","raw","udp","diagnostic"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/dnslookup@1.0.1","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/dnslookup#readme","bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"bin":{"dnslookup":"dnslookup.js"},"dist":{"shasum":"f2fbb2ae14dc32152240c8e8f33a331f7e291cbe","tarball":"https://registry.npmjs.org/@bobfrankston/dnslookup/-/dnslookup-1.0.1.tgz","fileCount":3,"integrity":"sha512-7u3aISog4YK+7vqyEwQRp7aMniUr1xIRlmGPZ468A7eXAyYktkANlqpUMRky1VGVvDH7+rVLUzfqw3Py2yBxyg==","signatures":[{"sig":"MEYCIQDZqJO84i0IFT+UpY0RLcSQDmyPQO3T+Yl+et3FJd6bggIhAIWM2+CLTfK+I5APwGqUiz+hFxRTwgzZLNEX6cqFIdVL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18605},"main":"dnslookup.js","type":"module","_from":"file:bobfrankston-dnslookup-1.0.1.tgz","types":"./dnslookup.d.ts","scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\projects\\dns\\dnslookup\\bobfrankston-dnslookup-1.0.1.tgz","_integrity":"sha512-7u3aISog4YK+7vqyEwQRp7aMniUr1xIRlmGPZ468A7eXAyYktkANlqpUMRky1VGVvDH7+rVLUzfqw3Py2yBxyg==","repository":{"url":"git+https://github.com/BobFrankston/dnslookup.git","type":"git"},"_npmVersion":"11.7.0","description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","directories":{},"_nodeVersion":"25.8.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.4.0"},"_npmOperationalInternal":{"tmp":"tmp/dnslookup_1.0.1_1773245410186_0.12123549375993736","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bobfrankston/dnslookup","version":"1.0.2","keywords":["dns","lookup","raw","udp","diagnostic"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/dnslookup@1.0.2","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/dnslookup#readme","bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"bin":{"dnslookup":"dnslookup.js"},"dist":{"shasum":"83b7d696b3497c61fddf4d4bc830c8600925c096","tarball":"https://registry.npmjs.org/@bobfrankston/dnslookup/-/dnslookup-1.0.2.tgz","fileCount":3,"integrity":"sha512-vw73naIOQnfHZEmG/8JeyuBMIwFPIaMgXgFRVsMc4GiUcWx1Mv253zAOXfxLQREQ7aDHjEw7zcFksuEIIHkLuA==","signatures":[{"sig":"MEQCICVjm07I4AgfjABetmYcH6sr2G3FOomPwt533ebQiVSCAiBg/dLHDjyiaVVdt8Jw+NCMdbV2k/6r0Em+edtSUVPE8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22761},"main":"dnslookup.js","type":"module","_from":"file:bobfrankston-dnslookup-1.0.2.tgz","types":"./dnslookup.d.ts","scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\projects\\dns\\dnslookup\\bobfrankston-dnslookup-1.0.2.tgz","_integrity":"sha512-vw73naIOQnfHZEmG/8JeyuBMIwFPIaMgXgFRVsMc4GiUcWx1Mv253zAOXfxLQREQ7aDHjEw7zcFksuEIIHkLuA==","repository":{"url":"git+https://github.com/BobFrankston/dnslookup.git","type":"git"},"_npmVersion":"11.7.0","description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","directories":{},"_nodeVersion":"25.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.4.0"},"_npmOperationalInternal":{"tmp":"tmp/dnslookup_1.0.2_1773246144723_0.5505864727698566","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bobfrankston/dnslookup","version":"1.0.3","keywords":["dns","lookup","raw","udp","diagnostic"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/dnslookup@1.0.3","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/dnslookup#readme","bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"bin":{"dnslookup":"dnslookup.js"},"dist":{"shasum":"09f91ddd7476119619d39bd2984266cef686aa01","tarball":"https://registry.npmjs.org/@bobfrankston/dnslookup/-/dnslookup-1.0.3.tgz","fileCount":4,"integrity":"sha512-5zxn1dJksVHYs5BJ6qx70JH1Evb+n0g7+aKhr708xgpeqO/KjLj9AVUkdr1akJ6F4BvpHzQWenZxuna4SScIeQ==","signatures":[{"sig":"MEYCIQCdCDYxD3f2f7pUNqLVsVn3hzmNrdnkXY6uezL92iZnagIhAM7AV7T80l3OBNPceAcmNXGa6NMw5LNR4qLR8EE8153a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25303},"main":"dnslookup.js","type":"module","_from":"file:bobfrankston-dnslookup-1.0.3.tgz","types":"./dnslookup.d.ts","scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"y:\\dev\\projects\\dns\\dnslookup\\bobfrankston-dnslookup-1.0.3.tgz","_integrity":"sha512-5zxn1dJksVHYs5BJ6qx70JH1Evb+n0g7+aKhr708xgpeqO/KjLj9AVUkdr1akJ6F4BvpHzQWenZxuna4SScIeQ==","repository":{"url":"git+https://github.com/BobFrankston/dnslookup.git","type":"git"},"_npmVersion":"11.7.0","description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","directories":{},"_nodeVersion":"25.8.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.4.0"},"_npmOperationalInternal":{"tmp":"tmp/dnslookup_1.0.3_1773249151197_0.5604629818848537","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bobfrankston/dnslookup","version":"1.0.4","keywords":["dns","lookup","raw","udp","diagnostic"],"author":{"name":"Bob Frankston"},"license":"MIT","_id":"@bobfrankston/dnslookup@1.0.4","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"homepage":"https://github.com/BobFrankston/dnslookup#readme","bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"bin":{"dnslookup":"dnslookup.js"},"dist":{"shasum":"65f45a233cba8b6a3c4c260a313f32474d07d2fd","tarball":"https://registry.npmjs.org/@bobfrankston/dnslookup/-/dnslookup-1.0.4.tgz","fileCount":4,"integrity":"sha512-wdWx9asR6anzjiqvZcXQF98d3/p3+olz6sYsG6Z2FYZbT/nDJMuY2eB6uTA0GQOkTJJkdds6+Dn0/oEg8jvVzg==","signatures":[{"sig":"MEQCIH+8hxhN+JcSqLzVthYAcvsbDCxY1dPSGmoXCjpzcmN/AiBqL+omRl6DWF3Tnp++RVWrzVrUVRRhX316Wb8oY/nIhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32791},"main":"dnslookup.js","type":"module","_from":"file:bobfrankston-dnslookup-1.0.4.tgz","types":"dnslookup.d.ts","scripts":{"build":"tsc","watch":"tsc -w"},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"_resolved":"Y:\\dev\\projects\\dns\\dnslookup\\bobfrankston-dnslookup-1.0.4.tgz","_integrity":"sha512-wdWx9asR6anzjiqvZcXQF98d3/p3+olz6sYsG6Z2FYZbT/nDJMuY2eB6uTA0GQOkTJJkdds6+Dn0/oEg8jvVzg==","repository":{"url":"git+https://github.com/BobFrankston/dnslookup.git","type":"git"},"_npmVersion":"11.12.1","description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.4.0"},"_npmOperationalInternal":{"tmp":"tmp/dnslookup_1.0.4_1777414026054_0.46128627917989107","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bobfrankston/dnslookup","version":"1.0.5","description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","type":"module","main":"dnslookup.js","types":"dnslookup.d.ts","bin":{"dnslookup":"dnslookup.js"},"scripts":{"build":"tsc","watch":"tsc -w"},"keywords":["dns","lookup","raw","udp","diagnostic"],"author":{"name":"Bob Frankston"},"license":"MIT","devDependencies":{"@types/node":"^25.4.0"},"repository":{"type":"git","url":"git+https://github.com/BobFrankston/dnslookup.git"},"publishConfig":{"access":"public"},"_id":"@bobfrankston/dnslookup@1.0.5","bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"homepage":"https://github.com/BobFrankston/dnslookup#readme","_integrity":"sha512-WySF7zbUQOFFoELUaQXEvwysldeu2tI9nfmlx6mLZoZ96SeuQalgTI7F8iTUz1s98MJyYECBsGqV4nG/FtG6Ow==","_resolved":"Y:\\dev\\projects\\dns\\dnslookup\\bobfrankston-dnslookup-1.0.5.tgz","_from":"file:bobfrankston-dnslookup-1.0.5.tgz","_nodeVersion":"26.1.0","_npmVersion":"11.14.1","dist":{"integrity":"sha512-WySF7zbUQOFFoELUaQXEvwysldeu2tI9nfmlx6mLZoZ96SeuQalgTI7F8iTUz1s98MJyYECBsGqV4nG/FtG6Ow==","shasum":"2f42209f0c12dc21fde8c0f5ed304f192eeb47a9","tarball":"https://registry.npmjs.org/@bobfrankston/dnslookup/-/dnslookup-1.0.5.tgz","fileCount":4,"unpackedSize":32791,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD2y9Ix8Ken99ZAdZI9nSWKhgn9yVEBrUgJgJGsVsK5uAIgeWFsPKwKSrSIrIkPibvGUOygTfTlcZ8nUsxBeLjSZgE="}]},"_npmUser":{"name":"bobfrankston","email":"npm@bob.ma"},"directories":{},"maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dnslookup_1.0.5_1780971938656_0.10946853902253562"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-11T16:10:10.081Z","modified":"2026-06-09T02:25:38.916Z","1.0.1":"2026-03-11T16:10:10.321Z","1.0.2":"2026-03-11T16:22:24.864Z","1.0.3":"2026-03-11T17:12:31.411Z","1.0.4":"2026-04-28T22:07:06.283Z","1.0.5":"2026-06-09T02:25:38.800Z"},"bugs":{"url":"https://github.com/BobFrankston/dnslookup/issues"},"author":{"name":"Bob Frankston"},"license":"MIT","homepage":"https://github.com/BobFrankston/dnslookup#readme","keywords":["dns","lookup","raw","udp","diagnostic"],"repository":{"type":"git","url":"git+https://github.com/BobFrankston/dnslookup.git"},"description":"Raw DNS query CLI - sends UDP packets directly for debugging DNS servers","maintainers":[{"name":"bobfrankston","email":"npm@bob.ma"}],"readme":"# dnslookup\r\n\r\nRaw DNS query CLI **and** Node.js library that builds and sends UDP packets directly per RFC 1035. No dependencies beyond Node.js. Useful for debugging DNS servers (e.g., Unifi, Pi-hole) by seeing exactly what's happening at the protocol level.\r\n\r\nBy design this is a thin wrapper over the wire protocol: no caching, no retries, no fallback chains. v4 transport only (the DNS server endpoint must be IPv4), but AAAA records are fully supported.\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install -g @bobfrankston/dnslookup\r\n```\r\n\r\n## Usage\r\n\r\n```bash\r\ndnslookup <hostname> [hostname2 ...] [options]\r\n```\r\n\r\n### Options\r\n\r\n| Flag | Description |\r\n|------|-------------|\r\n| `-t <type>` | Record type: A, NS, CNAME, SOA, PTR, MX, TXT, AAAA, ANY (default: A) |\r\n| `-s <server>` | DNS server IP (default: system DNS) |\r\n| `-x` | Hex dump of query and response packets |\r\n| `-v` | Verbose: show authority and additional sections |\r\n| `-detail` | Force detailed output (default for single name) |\r\n| `-table` | Force table output (default for multiple names) |\r\n| `--timeout <ms>` | Query timeout in ms (default: 5000) |\r\n\r\n### Single name (detail mode)\r\n\r\n```\r\n$ dnslookup rmf39.aaz.lt\r\n\r\n── DNS Query ──\r\n  Server:   172.20.0.1:53\r\n  Name:     rmf39.aaz.lt\r\n  Type:     A (1)\r\n\r\n  RTT:      9.67ms\r\n  Response: 46 bytes\r\n\r\n── Response Header ──\r\n  ID:       0x37bf\r\n  Flags:    0x8180 [QR RD RA]\r\n  Status:   NoError\r\n  Counts:   Questions=1 Answers=1 Authority=0 Additional=0\r\n\r\n── Answers (1) ──\r\n  rmf39.aaz.lt                   43m28s     A      108.26.220.160\r\n\r\n── Result ──\r\n  A   108.26.220.160\r\n```\r\n\r\n### Multiple names (table mode)\r\n\r\n```\r\n$ dnslookup rmf39 rmf39.aaz.lt example.com google.com\r\n\r\nName                 Server      Type       RTT       TTL  Status\r\nrmf39                172.20.0.1  A       10.1ms         -  NXDOMAIN\r\nrmf39.aaz.lt         172.20.0.1  A        1.6ms    43m36s  Found       108.26.220.160\r\nexample.com          172.20.0.1  A       25.6ms      5m0s  Found       104.18.26.120\r\n                                                                       104.18.27.120\r\ngoogle.com           172.20.0.1  A       20.1ms     3m10s  Found       142.250.217.14\r\n```\r\n\r\n### Compare DNS servers\r\n\r\n```bash\r\ndnslookup myhost -s 172.20.0.1\r\ndnslookup myhost -s 8.8.8.8\r\ndnslookup myhost -s 10.255.255.254   # WSL DNS proxy\r\n```\r\n\r\n### Hex dump for packet inspection\r\n\r\n```bash\r\ndnslookup example.com -x\r\n```\r\n\r\n## API\r\n\r\nInstall as a regular dependency and import:\r\n\r\n```bash\r\nnpm install @bobfrankston/dnslookup\r\n```\r\n\r\n```ts\r\nimport { lookup, lookupx, runQuery, QType } from \"@bobfrankston/dnslookup\";\r\n```\r\n\r\n### `lookup(hostname, options?)` → `Promise<string[]>`\r\n\r\nSimplest case. Returns an array of address strings (DNS may legitimately return multiple). Throws on transport failure or DNS error (NXDOMAIN, ServerFailure, …).\r\n\r\n```ts\r\nawait lookup(\"google.com\");                              // [\"142.250.190.238\"]\r\nawait lookup(\"google.com\", { type: \"AAAA\" });            // [\"2607:f8b0:...\"]\r\nawait lookup(\"example.com\", { server: \"8.8.8.8\", timeout: 2000 });\r\n```\r\n\r\n### `lookupx(hostname, options?)` → `Promise<LookupExtended>`\r\n\r\nExtended form: returns the same address list plus the diagnostic detail you'd see in the CLI's detail view (server, RTT, response size, header ID/flags/status, section counts, full record arrays). Throws only on transport failure; DNS errors come back as `status` (e.g. `\"NXDOMAIN\"`) with `addresses: []`.\r\n\r\n```ts\r\nconst r = await lookupx(\"google.com\");\r\n// r.addresses     -> [\"142.250.190.238\"]\r\n// r.server        -> \"172.20.0.1\"\r\n// r.type          -> \"A\"\r\n// r.rtt           -> 17.28\r\n// r.flagNames     -> [\"QR\", \"RD\", \"RA\"]\r\n// r.status        -> \"NoError\"\r\n// r.counts        -> { questions: 1, answers: 1, authority: 0, additional: 1 }\r\n// r.answers       -> [{ name, type, typeName, ttl, rdata, rdataRaw, ... }]\r\n```\r\n\r\n### `runQuery(hostname, server, qtype, timeout)` → `Promise<QueryResult>`\r\n\r\nLowest-level entry point. Returns the full parsed response (header, answers, authority, additional, RTT, raw query/response packets). Does **not** throw on DNS errors — failures are reported via the `status` and `error` fields. Use `QType.A` / `QType.AAAA` / etc. for `qtype`.\r\n\r\n### Options (`LookupOptions`)\r\n\r\n| Field | Type | Default | Notes |\r\n|---|---|---|---|\r\n| `server` | `string` | first system resolver (`dns.getServers()[0]`) | Must be an IPv4 address |\r\n| `type` | `\"A\" \\| \"AAAA\" \\| \"NS\" \\| \"CNAME\" \\| \"SOA\" \\| \"PTR\" \\| \"MX\" \\| \"TXT\" \\| \"ANY\"` | `\"A\"` | Same set as the `-t` CLI flag |\r\n| `timeout` | `number` (ms) | `5000` | |\r\n\r\n### Exports\r\n\r\n`lookup`, `lookupx`, `runQuery`, `QType`, `QTypeName`, and the types `LookupOptions`, `LookupExtended`, `QueryResult`, `DnsRecord`, `DnsHeader`.\r\n\r\n## How it works\r\n\r\n- Constructs raw DNS query packets per RFC 1035\r\n- Sends via UDP to port 53 using `node:dgram`\r\n- Parses response including DNS name compression (pointer offsets)\r\n- Supports record types: A, AAAA, MX, CNAME, NS, SOA, TXT, PTR\r\n- Zero runtime dependencies\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}