diff --git a/calculations.js b/calculations.js new file mode 100644 index 0000000..29a0914 --- /dev/null +++ b/calculations.js @@ -0,0 +1,44 @@ +function inet_ntoa(mode, addrint) { + var fn = "inet_ntoa_" + mode; + return window[fn](addrint); +} + +function inet_aton(mode, addrint) { + var fn = "inet_aton_" + mode; + return window[fn](addrint); +} + +function network_address(mode, addrint) { + var fn = "network_address_" + mode; + return window[fn](addrint); +} + +function subnet_addresses(mode, addrint) { + var fn = "subnet_addresses_" + mode; + return window[fn](addrint); +} + +function subnet_first_address_useable(mode, addrint) { + var fn = "subnet_first_address_useable_" + mode; + return window[fn](addrint); +} + +function subnet_last_address_useable(mode, addrint) { + var fn = "subnet_last_address_useable_" + mode; + return window[fn](addrint); +} + +function subnet_last_address(mode, subnet, mask) { + var fn = "subnet_last_address_" + mode; + return window[fn](mode, subnet, mask); +} + +function subnet_netmask(mode, addrint) { + var fn = "subnet_netmask_" + mode; + return window[fn](addrint); +} + +function num_hosts(mode, useableFirst, useableLast) { + var fn = "num_hosts_" + mode; + return window[fn](useableFirst, useableLast); +} diff --git a/calculations_4.js b/calculations_4.js new file mode 100644 index 0000000..c6d7f75 --- /dev/null +++ b/calculations_4.js @@ -0,0 +1,60 @@ +function inet_ntoa_4(addrint) { + return ( + ((addrint >> 24) & 0xff) + + "." + + ((addrint >> 16) & 0xff) + + "." + + ((addrint >> 8) & 0xff) + + "." + + (addrint & 0xff) + ); +}; + +function inet_aton_4(addrstr) { + var re = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/; + var res = re.exec(addrstr); + + if (res === null) { + return null; + } + + for (var i = 1; i <= 4; i++) { + if (res[i] < 0 || res[i] > 255) { + return null; + } + } + + return (res[1] << 24) | (res[2] << 16) | (res[3] << 8) | res[4]; +} + +function network_address_4(ip, mask) { + var maskbits = 0; + for (var i = 31 - mask; i >= 0; i--) { + ip &= ~1 << i; + } + return ip; +} + +function subnet_addresses_4(mask) { + return 1 << (32 - mask); +} + +function subnet_first_address_useable_4(addrint) { + return addrint + 1; +} + +function subnet_last_address_useable_4(addrint) { + return addrint - 1; +} + +function subnet_last_address_4(mode, subnet, mask) { + return subnet + subnet_addresses(mode, mask) - 1; +} + +function subnet_netmask_4(mask) { + return network_address(4, 0xffffffff, mask); +} + +function num_hosts_4(useableFirst, useableLast) { + return 1 + useableLast - useableFirst; +} diff --git a/calculations_6.js b/calculations_6.js new file mode 100644 index 0000000..c8ee8bd --- /dev/null +++ b/calculations_6.js @@ -0,0 +1,79 @@ +function inet_ntoa_6(addrint) { + return "" + + ((addrint >> 112n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 96n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 80n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 64n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 48n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 32n) & BigInt(0xffff)).toString(16) + + ":" + + ((addrint >> 16n) & BigInt(0xffff)).toString(16) + + ":" + + (addrint & BigInt(0xffff)).toString(16); +} + +function inet_aton_6(addrstr) { + var re = + /^([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})$/; + var res = re.exec(addrstr); + + if (res === null) { + return null; + } + + for (var i = 1; i <= 8; i++) { + if (res[i] < 0 || res[i] > 0xffff) { + return null; + } + } + + var r1 = BigInt(parseInt(res[1], 16)) << 112n; + var r2 = BigInt(parseInt(res[2], 16)) << 96n; + var r3 = BigInt(parseInt(res[3], 16)) << 80n; + var r4 = BigInt(parseInt(res[4], 16)) << 64n; + var r5 = BigInt(parseInt(res[5], 16)) << 48n; + var r6 = BigInt(parseInt(res[6], 16)) << 32n; + var r7 = BigInt(parseInt(res[7], 16)) << 16n; + var r8 = BigInt(parseInt(res[8], 16)); + + var rt = r1 | r2 | r3 | r4 | r5 | r6 | r7 | r8; + + return rt; +} + +function network_address_6(ip, mask) { + var maskbits = 0; + for (var i = 128 - mask; i >= 0; i--) { + ip &= ~1 << i; + } + return ip; +} + +function subnet_addresses_6(mask) { + return 1n << (128n - BigInt(mask)); +} + +function subnet_first_address_useable_6(addrint) { + return addrint + 1n; +} + +function subnet_last_address_useable_6(addrint) { + return addrint - 1n; +} + +function subnet_last_address_6(mode, subnet, mask) { + return subnet + subnet_addresses(mode, mask) - 1n; +} + +function subnet_netmask_6(mask) { + return undefined; +} + +function num_hosts_6(useableFirst, useableLast) { + return 1n + useableLast - useableFirst; +} diff --git a/gennum.php b/gennum.php index 249d3bb..b3996fc 100644 --- a/gennum.php +++ b/gennum.php @@ -1,5 +1,5 @@ - - -Visual Subnet Calculator - + function updateNumChildren(node) { + if (node[2] == null) { + node[1] = 0; + return 1; + } else { + node[1] = + updateNumChildren(node[2][0]) + updateNumChildren(node[2][1]); + return node[1]; + } + } - - - + function toggleColumn(cb) { + var colName = "col_" + cb.id.substr(3); + var col = document.getElementById(colName); - - - +
+ if (cb.checked) { + col.style.display = "block"; + } else { + col.style.display = "none"; + } + recreateTables(); /* because IE draws lines all over the place with border-collapse */ + } + -

Visual Subnet Calculator

+ + + + + + + + +
+

Visual Subnet Calculator

+ +

Enter the network you wish to subnet:

+ +
+ + + + + + + + + + + + +
IPv4 / IPv6Network AddressMask bits
+ + + + + + / + + + +
+ +

+ Show columns: + + + + + + + +

+
+ +

+ Click below to split and join subnets.
+ If you wish to save this subnetting for later, bookmark + this hyperlink. +

+
+ Fork me on GitHub +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + - -
Subnet addressNetmaskRange of addressesUseable IPsHostsDivideJoin
- - +
+