项目作者: LayeredStudio

项目描述 :
🌍 Discover publicly available DNS Records for a domain
高级语言: JavaScript
项目地址: git://github.com/LayeredStudio/dns-records.git
创建时间: 2019-05-18T10:20:59Z
项目社区:https://github.com/LayeredStudio/dns-records

开源协议:MIT License

下载


🌍 DNS Records

@layered/dns-records is a DNS helper library than can quickly discover and retrieve all DNS records for a domain.

  • Retrieves DNS records for any domain name
  • Discovers (almost) all A, AAAA, CNAME, and TXT for a domain, with option to specify extra subdomains
  • Detects wildcard * records
  • Provides results in common format, see DnsRecord
  • Works in all JavaScript runtimes: Browsers, Node.js, CloudFlare Workers, Deno, Bun, etc

→ See it in action here https://dmns.apphttps://chromewebstore.google.com/detail/domain-info/afbepfhknfficaflckmgflbmklcleidl

Getting Started

Installation

npm i @layered/dns-records

Usage

The library has a simple API.
Use getAllDnsRecords(domain) to retrieve all DNS records for a domain OR request specific record types with getDnsRecords(hostname, 'TXT')

Example

  1. import { getDnsRecords, getAllDnsRecords } from '@layered/dns-records'
  2. const txtRecords = await getDnsRecords('google.com', 'TXT')
  3. const allRecords = await getAllDnsRecords('x.com')

DNS Resolvers

Here is the list of supported DNS resolvers:

Name JS Runtime Notes
cloudflare-dns Works on all Requires fetch as global
google-dns Works on all Requires fetch as global
node-dns Works only in Node.js Uses Node.js DNS module
node-dig Works only in Node.js Uses dig command
deno-dns Works only in Deno Uses Deno.resolveDns)

Client API

DNS Records by type

getDnsRecords(name: string, type: string = 'A', resolver?): Promise<DnsRecord[]>

Params type default description
name string hostname. Ex: 'x.com' or email.apple.com
type string A record type: Ex: 'TXT', 'MX', 'CNAME'
resolver string best for current runtime DNS resolver to use, see resolvers above
  1. import { getDnsRecords } from '@layered/dns-records'
  2. const records1 = await getDnsRecords('google.com', 'A')
  3. console.log('DNS A records', records1)
  4. const records2 = await getDnsRecords('google.com', 'TXT')
  5. console.log('DNS TXT records', records2)

Returns a promise which resolves with an DnsRecord[] of records found:

  1. [ { name: 'google.com.',
  2. ttl: 608,
  3. type: 'TXT',
  4. data: '"v=spf1 include:_spf.google.com ~all"' },
  5. ...
  6. ]

All DNS records

getAllDnsRecords(domain: string, options: GetAllDnsRecordsOptions): Promise<DnsRecord[]>

Params type description
domain string Valid domain name, ex: 'google.com'
options object see GetAllDnsRecordsOptions
  1. import { getAllDnsRecords } from '@layered/dns-records'
  2. const allRecords = await getAllDnsRecords('x.com', {
  3. resolver: 'cloudflare-dns',
  4. commonSubdomainsCheck: true,
  5. subdomains: ['extra-subdomain-to-check-for'],
  6. })
  7. console.log('DNS all records', allRecords)

Returns a Promise which resolves with DnsRecord[] of all records found:

  1. [ { name: 'x.com.', ttl: 3600, type: 'NS', data: 'ns71.domaincontrol.com.' },
  2. { name: 'x.com.', ttl: 3600, type: 'NS', data: 'ns72.domaincontrol.com.' },
  3. { name: 'x.com.', ttl: 600, type: 'SOA', data: 'ns71.domaincontrol.com. dns.jomax.net. 2018071100 28800 7200 604800 600' },
  4. { name: 'x.com.', ttl: 600, type: 'A', data: '160.153.63.10' },
  5. { name: 'x.com.', ttl: 600, type: 'A', data: '160.153.63.10' },
  6. { name: 'www.x.com.', ttl: 3600, type: 'CNAME', data: 'x.com.' },
  7. { name: 'x.com.', ttl: 3600, type: 'MX', data: '10 mx-van.mail.am0.yahoodns.net.' }
  8. ]

More

Please report any issues here on GitHub.
Any contributions are welcome

License

MIT

Copyright (c) Andrei Igna, Layered