Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const ip4ToInt = ip =>
- ip.split('.').reduce((int, oct) => (int << 8) + parseInt(oct, 10), 0) >>> 0;
- const isIp4InCidr = ip => cidr => {
- const [range, bits = 32] = cidr.split('/');
- const mask = ~(2 ** (32 - bits) - 1);
- return (ip4ToInt(ip) & mask) === (ip4ToInt(range) & mask);
- };
- const isIp4InCidrs = (ip, cidrs) => cidrs.some(isIp4InCidr(ip));
- // isIp4InCidrs('192.168.1.5', ['10.10.0.0/16', '192.168.1.1/24']); // true
- const intToIp4 = int =>
- [(int >>> 24) & 0xFF, (int >>> 16) & 0xFF,
- (int >>> 8) & 0xFF, int & 0xFF].join('.');
- const calculateCidrRange = cidr => {
- const [range, bits = 32] = cidr.split('/');
- const mask = ~(2 ** (32 - bits) - 1);
- return [intToIp4(ip4ToInt(range) & mask), intToIp4(ip4ToInt(range) | ~mask)];
- };
- calculateCidrRange('192.168.1.0/24'); // ["192.168.1.0", "192.168.1.255"]
- const intToBin = int =>
- (int >>> 0).toString(2).padStart(32, 0).match(/.{1,8}/g).join('.');
- intToBin(ip4ToInt('192.168.1.1')); // 11000000.10101000.00000001.00000001
Add Comment
Please, Sign In to add comment