Socket
Socket
Sign inDemoInstall

ip-matching

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ip-matching

Utilities for IPv4/IPv6 ranges/subnets/masks parsing/matching, string representations, ...


Version published
Maintainers
1
Created
Source

IP-Matching

GitHub package version NPM NPM downloads Codacy Badge

GitHub Sponsors Donate

Standalone module with some handy features regarding IPs:

  • Quick and easy-to-use way to check whether an IP meets a requirement
  • Support for IPv4/IPv6 wildcard addresses, ranges, subnetworks and masks.
  • Supports both parsing and outputting all common IPv6 notations
  • Utility methods, e.g. next/previous IP, range to a list of CIDRs, ...
  • Every release is thoroughly tested and linted before published

Installation

npm install --save ip-matching
# or
yarn add ip-matching

Comes with its own built-in TypeScript declarations with included documentation.

Example

import { getMatch, IPMatch, IPSubnetwork, IPRange, matches } from 'ip-matching';

// matches(ip: string | IP, target: string | IPMatch): boolean;

matches('10.0.0.1', '10.0.0.0/24'); // true
matches('10.0.1.1', '10.0.0.0/24'); // false
matches('abc::def', 'abc:*::def'); // true
matches('abc::def', 'abc:9::def'); // false
matches('0001:2:3:4:5:6:7', '1:2:3:4:5:6:7'); // true

// getMatch returns an instance of
// IPv4, IPv6, IPRange, IPSubnetwork or IPMask, all extending IPMatch
const mySubnet: IPMatch = getMatch('fefe::0001:abcd/112');
mySubnet.type; // 'IPSubnetwork'
mySubnet instanceof IPSubnetwork; // true
mySubnet instanceof IPMatch; // true
mySubnet.toString(); // 'fefe::1:0/112'
mySubnet.matches('FEFE::1:bbbb'); // true
mySubnet.matches('FEFE::2:bbbb'); // false
mySubnet.equals(new IPSubnetwork(new IPv6('fefe::1:abcd'), 112)); // true
mySubnet.getAmount(); // 65536
(mySubnet as IPSubnetwork).getLast().toString(); // 'fefe::1:ffff'

const myIp = new IPv6('a:0:0::B:0:C');
myIp.toString(); // 'a::b:0:c'
myIp.toLongString(); // 'a:0:0:0:0:b:0:c'
myIp.toFullString(); // '000a:0000:0000:0000:0000:000b:0000:000c'
new IPv6('::ffff:a9db:*').toMixedString(); // '::ffff:169.219.*.*'

const myRange = getMatch('10.0.0.0-10.1.2.3') as IPRange;
myRange.convertToMasks().map((mask: IPMask) => mask.convertToSubnet().toString());
// [ '10.0.0.0/16', '10.1.0.0/23', '10.1.2.0/30' ]

const mask1 = getMatch('10.0.1.0/255.0.255.0') as IPMask;
const mask2 = getMatch('10.0.0.0/128.0.0.0') as IPMask;
mask1.isSubsetOf(mask2); // true
mask2.getAmount(); // 2147483648

getMatch('a::abbc:1234/ffff::ff80:000f').toString(); // 'a::ab80:4/ffff::ff80:f'

Note: The matches function and all constructors error for invalid inputs

You can take a look at the test code or the TypeScript declarations for all the features.

Allowed patterns

  • IP (IPv4/IPv6)
    • Regular IPv4: 10.0.0.0
    • Wildcard IPv4: 10.0.0.* or even 10.*.0.*
    • Regular IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
    • Shortened IPv6: 2001:db8:85a3::8a2e:0370:7334 or :: or ::1 or a::
    • Wildcard IPv6: 2001::* or even 2001::*:abc:*
    • Mixed IPv6 (mapped IPv4): ::ffff:127.0.0.1 (no wildcards allowed in IPv4 part)
    • Not allowed: 10.0.1*.0 or 2001::a*c
  • IP Range
    • IPv4: 10.0.0.0-10.1.2.3
    • IPv6: 2001::abc-2001::1:ffff
    • Note: Left side has to be "lower" than the right side
  • IP Subnetwork
    • IPv4: 10.0.0.0/16
    • IPv6: 2001::/123
  • IP Mask
    • IPv4: 10.0.0.0/255.0.64.0
    • IPv6: 2001:abcd::/ffff:ff8::

The IPMask's toString() method does not automatically simplify e.g. /255.0.0.0 to /8, even though those are equivalent. Since 2.0.0, IPMask comes with a method convertToSubnet() which returns an equivalent IPSubnetwork if possible, otherwise undefined.

Keywords

FAQs

Package last updated on 11 Jul 2021

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