https://github.com/tinovyatkin/is-localhost-ip
Checks whether given host/DNS name or IPv4/IPv6 address belongs to the local machine
https://github.com/tinovyatkin/is-localhost-ip
ipv4 ipv6 localhost networking nodejs
Last synced: about 1 month ago
JSON representation
Checks whether given host/DNS name or IPv4/IPv6 address belongs to the local machine
- Host: GitHub
- URL: https://github.com/tinovyatkin/is-localhost-ip
- Owner: tinovyatkin
- License: mit
- Created: 2019-08-17T22:04:34.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-11-07T23:34:00.000Z (over 2 years ago)
- Last Synced: 2025-04-16T04:24:36.825Z (11 months ago)
- Topics: ipv4, ipv6, localhost, networking, nodejs
- Language: JavaScript
- Homepage:
- Size: 1.42 MB
- Stars: 24
- Watchers: 3
- Forks: 3
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://codecov.io/gh/tinovyatkin/is-localhost-ip)

# is-localhost-ip
Zero-dependency Node.js utility that checks whether a hostname or IPv4/IPv6 address refers to the local machine.
This package aims to be strict and comprehensive:
- Validates input as an IP address or a syntactically valid hostname (including bracketed IPv6).
- Treats private/loopback/link-local ranges as local.
- Optionally verifies the address exists on the current machine by attempting to bind to it.
- Falls back to DNS resolution, so it works with hostnames mapped in `/etc/hosts` or a local resolver.
## Installation
```sh
npm i is-localhost-ip
# or
yarn add is-localhost-ip
# or
pnpm add is-localhost-ip
```
Requires Node.js `>=18`.
## Usage
```js
const isLocalhost = require("is-localhost-ip");
(async () => {
await isLocalhost("127.0.0.1"); // true
await isLocalhost("::ffff:127.0.0.1"); // true
await isLocalhost("192.168.0.12"); // true
await isLocalhost("192.168.0.12", true); // true only if an interface has this address
await isLocalhost("184.55.123.2"); // false
await isLocalhost("tino.local"); // true if it resolves to a local address
await isLocalhost("localhost"); // true
await isLocalhost("microsoft.com"); // false
})();
```
## API
### `isLocalhost(ipOrHostname, canBind?)`
Returns a `Promise`.
- `ipOrHostname` (`string`): IP address (v4/v6) or a hostname.
- `canBind` (`boolean`, default `false`): when `true`, additionally checks that the local machine can bind to the
address (i.e., it is configured on a local interface).
The function throws for invalid inputs (non-string values or syntactically invalid hostnames).
## Caveats
Internationalized domain names (IDNs) are not supported. If you need IDNs, use
[Punycode.js](https://github.com/bestiejs/punycode.js) (or another punycode implementation) to convert the input
to ASCII before calling this function:
```js
const isLocalhost = require("is-localhost-ip");
const punycode = require("punycode");
(async () => {
await isLocalhost(punycode.toASCII("свобода.рф")); // false
await isLocalhost(punycode.toASCII("私の.家")); // true
})();
```
## License
`is-localhost-ip` is available under the [MIT](https://mths.be/mit) license.