A simple, cross-platform ARP helper for Node.js. Give it an IP address on your local network and it'll hand back the MAC address — no native modules, no fuss.
Works on Linux, macOS, and Windows.
yarn add @gibme/arp
# or
npm install @gibme/arp
Requires Node >= 22.
import ARP from '@gibme/arp';
// Look up a MAC address by IP
const mac = await ARP.lookup('192.168.1.1');
console.log(mac); // e.g. "AA:BB:CC:DD:EE:FF"
ARP.lookup(ip, separator?)Resolves an IP address to a MAC address on your local network. It pings the target first (to populate the ARP table), then reads the result from the system ARP cache.
| Parameter | Type | Default | Description |
|---|---|---|---|
ip |
string |
— | The IPv4 or IPv6 address to look up |
separator |
string |
':' |
Character between MAC octets |
Returns an uppercase MAC string (e.g. AA:BB:CC:DD:EE:FF).
Throws if the IP is invalid, the address isn't found in the ARP table, or the platform is unsupported.
await ARP.lookup('192.168.1.1'); // "AA:BB:CC:DD:EE:FF"
await ARP.lookup('192.168.1.1', '-'); // "AA-BB-CC-DD-EE-FF"
await ARP.lookup('192.168.1.1', ''); // "AABBCCDDEEFF"
ARP.get_gateway_ipv4()Returns your default gateway's IPv4 address, or undefined if one isn't available. Handy for discovering the local router so you can pass it straight into lookup().
const gateway = await ARP.get_gateway_ipv4();
if (gateway) {
const mac = await ARP.lookup(gateway);
console.log(`Router MAC: ${mac}`);
}
ARP.get_gateway_ipv6()Same as above, but for IPv6.
Under the hood, lookup() spawns two system commands in sequence:
ping — sends a single ICMP packet to ensure the target IP is in the local ARP cachearp — reads the system ARP table and extracts the MAC address for the given IPEach spawned process has a 10-second timeout to avoid hanging on unresponsive hosts. Platform-specific flags are handled automatically (-c 1 on Linux/macOS, -n 1 on Windows, etc.).
The gateway functions use the default-gateway package to query the system routing table.
In addition to the default export, each function is available as a named export:
import { lookup, get_gateway_ipv4, get_gateway_ipv6 } from '@gibme/arp';
Full generated API docs are available at https://gibme-npm.github.io/arp/.