Skip to content

Instantly share code, notes, and snippets.

@rkeVader
Created March 12, 2019 12:31
Show Gist options
  • Save rkeVader/b87db6095a557d3be1bdc8d8729bfe71 to your computer and use it in GitHub Desktop.
Save rkeVader/b87db6095a557d3be1bdc8d8729bfe71 to your computer and use it in GitHub Desktop.
// 2018.12.03 Atienza, Chris
// Given a slash specified network (ie: 10.1.1.1/24) returns the low and hi IPs in the defined range
// does not exclude any special reserved addresses
function _cidrToRange(cidr) {
var range = [2];
cidr = cidr.split('/');
var cidr_1 = parseInt(cidr[1])
range[0] = long2ip((ip2long(cidr[0])) & ((-1 << (32 - cidr_1))));
start = ip2long(range[0])
range[1] = long2ip(start + Math.pow(2, (32 - cidr_1)) - 1);
return range;
} // cidrToRange
function calculateCidrRange(range, bits) {
if (!bits)
bits = 32;
//var [range, bits = 32] = cidr.split('/');
//var mask = ~(2 ** (32 - bits) - 1);
var mask1 = ~(Math.pow(2 ^ (32 - bits)) - 1);
var mask2 = (Math.pow(2 ^ (32 - bits)) - 1);
return [long2ip(ip2long(range) & mask1), long2ip(ip2long(range) | mask2)];
} // calculateCidrRange
// Converts an Internet standard dotted format string into an IPv4 Internet network address (long)
// * example : long2ip( '192.0.34.166' );
// * returns : 3221234342
function ip2long(ip) {
return ip.split('.').reduce(function (ipInt, octet) { return (ipInt << 8) + parseInt(octet, 10) }, 0) >>> 0;
} // ip2long
// Converts an IPv4 Internet network address into a string in Internet standard dotted format
// * example : long2ip( 3221234342 );
// * returns : '192.0.34.166'
function long2ip(ipInt) {
return ((ipInt >>> 24) + '.' + (ipInt >> 16 & 255) + '.' + (ipInt >> 8 & 255) + '.' + (ipInt & 255));
} // long2ip
// redo below here... this is lazy/brute-force... but it does work
// Converts an Internet standard dotted formart mask into the cidr 'slash' value
// * example: mask2cidr("255.255.255.0")
// * returns: "/24"
function mask2cidr(mask) {
switch (mask) {
case "0.0.0.0":
return ret_mask = "/0";
case "128.0.0.0":
return ret_mask = "/1";
case "192.0.0.0":
return ret_mask = "/2";
case "224.0.0.0":
return ret_mask = "/3";
case "240.0.0.0":
return ret_mask = "/4";
case "248.0.0.0":
return ret_mask = "/5";
case "252.0.0.0":
return ret_mask = "/6";
case "254.0.0.0":
return ret_mask = "/7";
case "255.0.0.0":
return ret_mask = "/8";
case "255.128.0.0":
return ret_mask = "/9";
case "255.192.0.0":
return ret_mask = "/10";
case "255.224.0.0":
return ret_mask = "/11";
case "255.240.0.0":
return ret_mask = "/12";
case "255.248.0.0":
return ret_mask = "/13";
case "255.252.0.0":
return ret_mask = "/14";
case "255.254.0.0":
return ret_mask = "/15";
case "255.255.0.0":
return ret_mask = "/16";
case "255.255.128.0":
return ret_mask = "/17";
case "255.255.192.0":
return ret_mask = "/18";
case "255.255.224.0":
return ret_mask = "/19";
case "255.255.240.0":
return ret_mask = "/20";
case "255.255.248.0":
return ret_mask = "/21";
case "255.255.252.0":
return ret_mask = "/22";
case "255.255.254.0":
return ret_mask = "/23";
case "255.255.255.0":
return ret_mask = "/24";
case "255.255.255.128":
return ret_mask = "/25";
case "255.255.255.192":
return ret_mask = "/26";
case "255.255.255.224":
return ret_mask = "/27";
case "255.255.255.240":
return ret_mask = "/28";
case "255.255.255.248":
return ret_mask = "/29";
case "255.255.255.252":
return ret_mask = "/30";
case "255.255.255.254":
return ret_mask = "/31";
case "255.255.255.255":
return ret_mask = ""
}
} // mask2cidr
// redo below here... this is lazy/brute-force... but it does work
// Converts a cidr 'slash' value into an Internet standard dotted formart mask
// * example: cidr2mask("/24")
// * returns: "255.255.255.0"
function cidr2mask(cidr) {
switch (cidr) {
case "/0":
return "0.0.0.0";
case "/1":
return "128.0.0.0";
case "/2":
return "192.0.0.0";
case "/3":
return "224.0.0.0";
case "/4":
return "240.0.0.0";
case "/5":
return "248.0.0.0";
case "/6":
return "252.0.0.0";
case "/7":
return "254.0.0.0";
case "/8":
return "255.0.0.0";
case "/9":
return "255.128.0.0";
case "/10":
return "255.192.0.0";
case "/11":
return "255.224.0.0";
case "/12":
return "255.240.0.0";
case "/13":
return "255.248.0.0";
case "/14":
return "255.252.0.0";
case "/15":
return "255.254.0.0";
case "/16":
return "255.255.0.0";
case "/17":
return "255.255.128.0";
case "/18":
return "255.255.192.0";
case "/19":
return "255.255.224.0";
case "/20":
return "255.255.240.0";
case "/21":
return "255.255.248.0";
case "/22":
return "255.255.252.0";
case "/23":
return "255.255.254.0";
case "/24":
return "255.255.255.0";
case "/25":
return "255.255.255.128";
case "/26":
return "255.255.255.192";
case "/27":
return "255.255.255.224";
case "/28":
return "255.255.255.240";
case "/29":
return "255.255.255.248";
case "/30":
return "255.255.255.252";
case "/31":
return "255.255.255.254";
case "":
return "255.255.255.255";
}
} // cidr2mask
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment