You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

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, ...

2.1.2
latest
Source
npmnpm
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
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

match

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