Skip to content
This repository has been archived by the owner on Apr 21, 2024. It is now read-only.
/ whois Public archive

🔎 A low overhead asynchronous whois client for Node.js

License

Notifications You must be signed in to change notification settings

ocku/whois

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@ocku/whois

A low overhead asynchronous whois client for Node.js.

Usage

This library provides a simple interface consisting of a single asynchronous function. It can be used like this:

Important

The lookup function always returns a utf8 string.

// format: lookup(domain, options?)
import { lookup } from '@ocku/whois';
// or
const { lookup } = require('@ocku/whois');
// Query an ipv4 address
console.log(await lookup('1.1.1.1')); // ...

// Query an ipv6 address
console.log(await lookup('2606:4700:4700::1001')); // ...

// Query a domain
console.log(await lookup('lost.st')); // ...

// Query a domain with punycode
console.log(await lookup('lost.xn--tckwe')); // ...

// Query a tld
console.log(await lookup('de')); // ...

Configuration

Additionally, the behavior of the function can be customized with the optional options parameter, which has the following structure:

type LookupOptions = {
  follow?: number; // the maximum number of servers to follow.

  // type LookupServer
  server?: {
    // an optional server to use instead of choosing one automatically.
    host: string; // the host to connect to (add the port below, not here!)
    port?: number; // [default: 43] - this can be omitted most times.

    // when a whois message is sent, the (prefix, domain, and suffix) are joined by spaces.
    // this means that there's no need for trailing or leading spaces on {prefix} or {suffix}.
    prefix?: string; // [default: ''] - a string to send before the domain, usually handles (eg: '-T dn,ace' or 'n').
    suffix?: string; // [default: ''] - a string to send after the domain (uncommon, but here just in case).
    encoding?: string; // supported encodings: https://nodejs.org/docs/v20.1.0/api/util.html#encodings-supported-by-default-with-full-icu-data
  };
  timeout?: number; // a timeout in milliseconds.
  // allows you to make the request through a SOCKS proxy.
  // when present, socksClientOptions is directly passed to SocksClient.createConnection(1).
  // see https://www.npmjs.com/package/socks#quick-start-example
  socksClientOptions?: SocksClientOptions;
};

It can be used like this:

const options = { timeout: 10000 };
const res = await lookup('lost.st', options);
console.log(res); // ...

Punycode

Punycode domain lookups are supported, but to keep overhead low, special Unicode characters are not automatically transcoded to LDH.

For clarity:

const { toASCII } = require('punycode/');
// this is good
await lookup('nic.xn--tckwe'); // works
await lookup(toASCII('nic.コム')); // works
// this is bad
await lookup('nic.コム'); // goes through IANA, returns "No match"

Requirements

This library requires node 20.10.0 (LTS) to work.

Reference

About

🔎 A low overhead asynchronous whois client for Node.js

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published