Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@network-utils/arp-lookup

Package Overview
Dependencies
Maintainers
2
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@network-utils/arp-lookup

A simple ARP util to map an IP address to a MAC address and vice versa.

  • 2.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
651
decreased by-31.04%
Maintainers
2
Weekly downloads
 
Created
Source

arp-lookup

checks code style: prettier

About

arp-lookup is a simple ARP utility to map an IP address to a MAC address and vice versa.

Vendor information has been removed from v2 in favor of @network-utils/vender-lookup
Please see the CHANGELOG.md for the full list of breaking changes

Installation

$ npm install @network-utils/arp-lookup

Usage

Example

import arp from '@network-utils/arp-lookup'
// Or
import {toMAC, toIP, ...} from '@network-utils/arp-lookup'

// Retrieve the corresponding IP address for a given MAC address
await arp.toIP('04-A1-51-1B-12-92') // Or '04:a1:51:1b:12:92' (any valid MAC format)
// Result: "192.168.2.47"

// Retrieve the corresponding MAC address for a given IP address
await arp.toMAC('192.168.2.47')
// Result: "04:a1:51:1b:12:92" 👈🏼 All MAC addresses are normalized to this format

arp.isMAC('04-a1:51:1B-12-92') // true
arp.isMAC('not:a:mac') // false

arp.isIP('192.168.2.47') // true
arp.isIP('not.an.ip') // false

// Note: Unavailable on darwin based systems.
await arp.isType('dynamic', '192.168.2.47') // true
await arp.isType('dynamic', '04:a1:51:1b:12:92') // true
await arp.isType('static', '192.168.2.255') // true
await arp.isType('static', 'ff:ff:ff:ff:ff:ff') // true
await arp.isType('undefined', '0.0.0.0') // true

// Note: `type` property is always set to `"unknown"` on darwin systems
await arp.getTable()
// Result:
[
    { ip: '192.168.137.255', mac: 'ff:ff:ff:ff:ff:ff', type: 'static' },
    { ip: '224.0.0.22', mac: '01:00:5e:00:00:16', type: 'static' },
    { ip: '224.0.0.251', mac: '01:00:5e:00:00:fb', type: 'static' },
    { ip: '224.0.0.252', mac: '01:00:5e:00:00:fc', type: 'static' },
    { ip: '239.255.255.250', mac: '01:00:5e:7f:ff:fa', type: 'static' },
    { ip: '192.168.2.1', mac: '04:a1:51:1b:12:92', type: 'dynamic' },
    { ip: '192.168.2.3', mac: '1a:b1:61:2f:14:72', type: 'dynamic' },
    { ip: '192.168.2.255', mac: 'ff:ff:ff:ff:ff:ff', type: 'static' },
    { ip: '224.0.0.2', mac: '01:00:5e:00:00:02', type: 'static' },
    ...
]


// Note: `type` property is always set to `"unknown"` on Unix systems
await arp.fromPrefix('01:00:5e')
// Result:
[
    { ip: '224.0.0.22', mac: '01:00:5e:00:00:16', type: 'static' },
    { ip: '224.0.0.251', mac: '01:00:5e:00:00:fb', type: 'static' },
    { ip: '224.0.0.252', mac: '01:00:5e:00:00:fc', type: 'static' },
    { ip: '239.255.255.250', mac: '01:00:5e:7f:ff:fa', type: 'static' },
    { ip: '224.0.0.2', mac: '01:00:5e:00:00:02', type: 'static' },
    ...
]

getTable(): Promise<IArpTable>

Returns a promise containing the parsed output of $ arp -a with the addition of a vendor field.
Note that the type property is always set to "unknown" on Unix systems


toMAC(ip: string): Promise<string | null>

Returns a promise containing the MAC that relates to ip or null if a match couldn't be made.
Throws an "Invalid IP" error if ip is not a valid IP address


toIP(mac: string): Promise<string | null>

Returns a promise containing the IP that relates to mac or null if a match couldn't be made.
Throws an "Invalid MAC" error if mac is not a valid MAC address


fromPrefix(prefix: string): Promise<IArpTableRow[]>

Returns any devices on the network with the specified MAC prefix, or an empty array if none exist.
Throws an "Invalid Prefix" error if prefix is not a valid MAC address prefix


getType(address: string): Promise<'static' | 'dynamic' | 'unknown' | 'undefined'>

  • address can be any valid IP or MAC address

Returns a promise containing a string which indicates the record type.
This method is useless on Unix based systems because $ arp -a doesn't return the type for an address
Throws an "Invalid address" error if address is not a valid IP or MAC address


isType(type: 'static' | 'dynamic' | 'unknown' | 'undefined', address: string): Promise<boolean>

  • address can be any valid IP or MAC address

Returns a promise containing a boolean which indicates the record for address is type.
Pass type = "undefined" to determine if a record for address exists or not.
This method is useless on Unix based systems because $ arp -a doesn't return the type for an address
Throws an "Invalid address" error if address is not a valid IP or MAC address


isMAC(mac: string): boolean

Checks if a MAC address is valid


isPrefix(prefix: string): boolean

Checks if a MAC address prefix is valid


isIP(ip: string): boolean

Checks if an IP address is valid


IArpTableRow

IArpTableRow {
  ip: string
  mac: string
  type: 'static' | 'dynamic' | 'unknown'
}

IArpTable

An array of IArpTableRow's.

type IArpTable = IArpTableRow[]

Testing

$ git clone https://github.com/justintaddei/arp-lookup.git
$ cd arp-lookup
$ npm install
$ npm test

License

MIT

Keywords

FAQs

Package last updated on 27 Sep 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc