Initial commit
This commit is contained in:
commit
9c73f3eda9
3 changed files with 171 additions and 0 deletions
84
ipclass.js
Normal file
84
ipclass.js
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
"use strict";
|
||||
|
||||
class IP {
|
||||
/**
|
||||
*
|
||||
* @param {Number} fo First octet
|
||||
* @param {Number} se Second octet
|
||||
* @param {Number} to Third octet
|
||||
* @param {Number} lo Last octet
|
||||
*/
|
||||
constructor(fo, se, to, lo) {
|
||||
this.raw = BigInt(fo) << 24n | BigInt(se) << 16n | BigInt(to) << 8n | BigInt(lo);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {BigInt} num Amount to add
|
||||
*/
|
||||
add(num=1n) {
|
||||
if (typeof(num) !== typeof(0n)) {
|
||||
num = BigInt(num);
|
||||
}
|
||||
this.raw += num;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {BigInt} num Amount to sub
|
||||
*/
|
||||
sub(num=1n) {
|
||||
if (typeof(num) !== typeof(0n)) {
|
||||
num = BigInt(num);
|
||||
}
|
||||
this.raw -= num;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Number} num Which octet to pull (0-based)
|
||||
*/
|
||||
octet(num) {
|
||||
if (typeof(num) !== typeof(0n)) {
|
||||
num = BigInt(num);
|
||||
}
|
||||
if (num > 3n) throw new Error("Four octets in IPv4 IP-address");
|
||||
|
||||
return this.raw >> (8n * (3n - num)) & 0xFFn;
|
||||
}
|
||||
|
||||
toString() {
|
||||
return `${this.raw >> 24n & 0xFFn}.${this.raw >> 16n & 0xFFn}.${this.raw >> 8n & 0xFFn}.${this.raw & 0xFFn}`;
|
||||
}
|
||||
|
||||
clone() {
|
||||
return new IP(this.octet(0n), this.octet(1n), this.octet(2n), this.octet(3n));
|
||||
}
|
||||
}
|
||||
|
||||
class Subnet {
|
||||
/**
|
||||
*
|
||||
* @param {IP} ip
|
||||
* @param {Number} subnetMask
|
||||
*/
|
||||
constructor(ip, subnetMask) {
|
||||
this.subnetCapacity = Math.pow(2, 32 - subnetMask);
|
||||
this.gateway = ip;
|
||||
|
||||
const bmask = "".padStart(32 - subnetMask, 0).padStart(32, 1);
|
||||
const fo = parseInt(bmask.substr(0, 8), 2);
|
||||
const se = parseInt(bmask.substr(8, 8), 2);
|
||||
const to = parseInt(bmask.substr(16, 8), 2);
|
||||
const lo = parseInt(bmask.substr(24, 8), 2);
|
||||
this.mask = new IP(fo, se, to, lo);
|
||||
|
||||
this.firstIP = this.gateway.clone();
|
||||
this.firstIP.add(1);
|
||||
this.lastIP = this.firstIP.clone();
|
||||
this.lastIP.add(this.subnetCapacity);
|
||||
this.lastIP.sub(3);
|
||||
this.broadcastIP = this.lastIP.clone();
|
||||
this.broadcastIP.add(1);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue