ip6
Version:
IPv6 address helper utilities.
162 lines (156 loc) • 6.55 kB
JavaScript
import ip6 from './ip6.js';
import { createRequire } from "module";
const require = createRequire(import.meta.url);
let pjson = require('./package.json');
(function () {
'use strict';
let args = function () {
let ret = [];
process.argv.forEach(function (val, index, array) {
if (index >= 2) {
ret.push(val);
}
});
return ret;
};
let input = args();
if (input.length === 0) {
console.log('ip6 version: ', pjson.version);
console.log('Usage:');
console.log(' ip6 -v, --version to show version information.');
console.log(' ip6 -n, --normalize addr to normalize an IPv6 address.');
console.log(' ip6 -a, --abbreviate addr to abbreviate an IPv6 address.');
console.log(' ip6 -d, --divide [-s, --short] subnet mask new_mask [limit] \n to divide an IPv6 subnet into smaller subnets.');
console.log(' ip6 -r, --random [-s, --short] subnet mask new_mask [limit] \n to generate random addresses/subnets from an IPv6 subnet.');
console.log(' ip6 -R, --range [-s, --short] subnet mask new_mask \n to calculate the range and size of an IPv6 subnet.');
console.log(' ip6 -p, --ptr addr mask to generate PTR record for DNS zone file.');
console.log();
console.log('Examples:');
console.log(' To normalize an IPv6 address:');
console.log(' ip6 -n 2001:db8::');
console.log(' 2001:0db8:0000:0000:0000:0000:0000:0000');
console.log();
console.log(' To abbreviate an IPv6 address:');
console.log(' ip6 -a 2001:0db8:0000:0000:0000:0000:0000:0000');
console.log(' 2001:db8::');
console.log();
console.log(' To divide a /64 subnet into 4 /66 subnets:');
console.log(' ip6 -d 2001:db8:: 64 66');
console.log(' 2001:0db8:0000:0000:0000:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:4000:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:8000:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:c000:0000:0000:0000');
console.log();
console.log(' To divide a /64 subnet into /80 subnets, but outputs only 5 subnets:');
console.log(' ip6 -d 2001:db8:: 64 80 5');
console.log(' 2001:0db8:0000:0000:0000:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:0001:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:0002:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:0003:0000:0000:0000');
console.log(' 2001:0db8:0000:0000:0004:0000:0000:0000');
console.log();
console.log(' To divide a /64 subnet into /80 subnets, but outputs only 5 subnets in abbreviated mode:');
console.log(' ip6 -d -s 2001:db8:: 64 80 5');
console.log(' 2001:db8::');
console.log(' 2001:db8:0:0:1::');
console.log(' 2001:db8:0:0:2::');
console.log(' 2001:db8:0:0:3::');
console.log(' 2001:db8:0:0:4::');
console.log();
console.log(' To generate 5 random /56 subnets from a /48 subnets:');
console.log(' ip6 -r -s 2607:5300:60:: 48 56 5');
console.log(' 2607:5300:60:f00::');
console.log(' 2607:5300:60:3900::');
console.log(' 2607:5300:60:5c00::');
console.log(' 2607:5300:60:a800::');
console.log(' 2607:5300:60:e00::');
console.log();
console.log(' To calculate the range and size of a /64 subnet divided into /120 subnets:');
console.log(' ip6 -R -s 2001:db8:: 64 80');
console.log(' {"start":"2001:db8::","end":"2001:db8::ffff:ffff:ffff:ff00","size"::65536}');
console.log();
console.log(' To generate a PTR record for DNS zone file:');
console.log(' ip6 -p 2607:5300:60:1234:cafe:babe:dead:beef 64');
console.log(' f.e.e.b.d.a.e.d.e.b.a.b.e.f.a.c');
} else if (input[0] === '-v' || input[0] === '--version') {
console.log('ip6 version: ', pjson.version);
} else if (input[0] === '-n' || input[0] === '--normalize') {
try {
const output = ip6.normalize(input[1]);
console.log(output);
} catch (e) {
console.error(e.message);
}
} else if (input[0] === '-a' || input[0] === '--abbreviate') {
try {
const output = ip6.abbreviate(input[1]);
console.log(output);
} catch (e) {
console.error(e.message);
}
} else if (input.includes('-d') || input.includes('--divide')) {
let abbr = false;
if (input.includes('-s') || input.includes('--short')) {
abbr = true;
}
try {
if (abbr) {
const output = ip6.divideSubnet(input[2], input[3], input[4], input[5], true);
for (let subnet of output) {
console.log(subnet);
}
} else {
const output = ip6.divideSubnet(input[1], input[2], input[3], input[4]);
for (let subnet of output) {
console.log(subnet);
}
}
} catch (e) {
console.error(e.message);
}
} else if (input.includes('-r') || input.includes('--random')) {
let abbr = false;
if (input.includes('-s') || input.includes('--short')) {
abbr = true;
}
try {
if (abbr) {
const output = ip6.randomSubnet(input[2], input[3], input[4], input[5], true);
for (let subnet of output) {
console.log(subnet);
}
} else {
const output = ip6.randomSubnet(input[1], input[2], input[3], input[4]);
for (let subnet of output) {
console.log(subnet);
}
}
} catch (e) {
console.error(e.message);
}
} else if (input.includes('-R') || input.includes('--range')) {
let abbr = false;
if (input.includes('-s') || input.includes('--short')) {
abbr = true;
}
try {
if (abbr) {
const output = ip6.range(input[2], input[3], input[4], true);
console.log(JSON.stringify(output));
} else {
const output = ip6.range(input[1], input[2], input[3]);
console.log(JSON.stringify(output));
}
} catch (e) {
console.error(e.message);
}
} else if (input[0] === '-p' || input[0] === '--ptr') {
try {
const output = ip6.ptr(input[1], input[2]);
console.log(output);
} catch (e) {
console.error(e.message);
}
}
})();