Skip to content

Instantly share code, notes, and snippets.

@danielgindi
Created November 21, 2017 06:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielgindi/0cc7c4063684cbf32de40f04120299e7 to your computer and use it in GitHub Desktop.
Save danielgindi/0cc7c4063684cbf32de40f04120299e7 to your computer and use it in GitHub Desktop.
Generate a list of the common-denominator CIDR IP ranges from a list of IPs
function getLowestIpRanges(ips) {
let ipRanges = [];
ips.forEach(x => {
let x3 = x.replace(/\d+$/, '');
let x2 = x3.replace(/\d+\.?$/, '');
let x1 = x2.replace(/\d+\.?$/, '');
let ex = ipRanges.filter(y => y == x3 + '0' || y == x2 + '0.0' || y == x1 + '0.0.0');
if (ex.length) return;
ex = ipRanges.filter(y => y.startsWith(x2));
if (ex.length) {
ipRanges.splice(ipRanges.indexOf(x[0]), 1)
ipRanges.push(x2 + '0.0')
} else {
ex = ipRanges.filter(y => y.startsWith(x1));
if (ex.length) {
ipRanges.splice(ipRanges.indexOf(x[0]), 1)
ipRanges.push(x1 + '0.0.0')
} else {
ipRanges.push(x3 + '0')
}
}
});
ipRanges = ipRanges.map(x => x.endsWith('.0.0.0') ? (x + '/8') : (x.endsWith('.0.0') ? (x + '/16') : (x + '/24')));
return ipRanges;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment