LayeredStudio / whoiser

🌍 Easy to use WHOIS info for domains, TLDs and IPs
MIT License
202 stars 29 forks source link
domain ip tlds whois whois-client whois-info whois-lookup

🌍 Whoiser

whoiser is a WHOIS client for Node.js that helps with querying WHOIS servers for TLDs, domain names, AS numbers and IPs.

Has support for auto-discovery WHOIS servers for TLDs and IPs allocators, making it easy to get WHOIS info with a single call like whoiser('google.com') or whoiser('1.1.1.1'). Applies minimal parsing to results, returning same data format from different WHOIS servers.

Highlights

→ See it in action here https://dmns.app

Getting Started

Installation

npm i whoiser

Usage

The library has a simple API. Use whoiser(query) with any query you would want OR use specific functions with options like whoiser.domain(domain, {options}), whoiser.ip(ip, {options})

Example

const whoiser = require('whoiser')

const domainWhois = whoiser('google.com')
const tldWhois = whoiser('.net')
const ipWhois = whoiser('1.1.1.1')

See all examples

Client API

Domain whois

Get WHOIS info for domains.

whoiser.domain(domain, options): Promise<Object<whoisServer>>

const whoiser = require('whoiser');

(async () => {

    // WHOIS info from Registry (Verisign) AND Registrar (MarkMonitor) whois servers
    let domainInfo = await whoiser('google.com')

    // OR with options for whois server and how many WHOIS servers to query
    let domainInfo2 = await whoiser.domain('blog.google', {host: 'whois.nic.google', follow: 1})

    console.log(domainInfo, domainInfo2)
})();

Returns a promise which resolves with an Object of WHOIS servers checked:

{
        "whois.verisign-grs.com": {
                "Domain Name": "GOOGLE.COM",
                "Registrar WHOIS Server": "whois.markmonitor.com",
                ...
        },
        "whois.markmonitor.com": {
                "Domain Name": "google.com",
                "Creation Date": "1997-09-15T00:00:00-0700",
                "Expiry Date": "2020-09-13T21:00:00-0700",
                "Registrar": "MarkMonitor, Inc.",
                "Domain Status": [
                        "clientUpdateProhibited",
                        "clientTransferProhibited"
                ],
                ...
                "Name Server": [
                        "ns1.google.com",
                        "ns2.google.com"
                ],
                "text": [
                        "For more information on WHOIS status codes, please visit:",
                        ...
                ]
        }
}

IP whois

Get WHOIS info for IPs

whoiser.ip(ip, options): Promise<Object>

const whoiser = require('whoiser');

(async () => {

    // WHOIS info with auto-discovering for WHOIS server
    let ipInfo = await whoiser('1.1.1.1')

    // OR with options for whois server
    let ipInfo2 = await whoiser.ip('8.8.8.8', {host: 'whois.arin.net'})

    console.log(ipInfo, ipInfo2)
})();

Returns a promise which resolves with an Array of WHOIS info lines:

{
    range: '2606:4700:: - 2606:4700:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF',
    route: '2606:4700::/32',
    NetName: 'CLOUDFLARENET',
    NetHandle: 'NET6-2606-4700-1',
    Parent: 'NET6-2600 (NET6-2600-1)',
    NetType: 'Direct Allocation',
    asn: 'AS13335',
    Organization: 'Cloudflare, Inc. (CLOUD14)',
    RegDate: '2011-11-01',
    Updated: '2017-02-17',
    Comment: 'All Cloudflare abuse reporting can be done via  https://www.cloudflare.com/abuse',
}

AS Number whois

Get WHOIS info for an AS number

whoiser.asn(asn, options): Promise<Object>

const whoiser = require('whoiser');

(async () => {

        // WHOIS info for ASN15169
        let whois = await whoiser.asn(15169)

        console.log(whois)
})();

Returns a promise which resolves with an Object of WHOIS info:

{
    ASNumber: '15169',
    ASName: 'GOOGLE',
    ASHandle: 'AS15169',
    RegDate: '2000-03-30',
    Updated: '2012-02-24',
    Ref: 'https://rdap.arin.net/registry/autnum/15169',
}

Roadmap

Aiming to have these features:

Unsupported TLDs

More

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

License

MIT

Copyright (c) Andrei Igna, Layered