For example:
- IP Address:
130.45.34.36
- Mask:
255.255.240.0
What would be Net ID/Subnet Address, and Broadcast Address?
For example:
130.45.34.36
255.255.240.0
What would be Net ID/Subnet Address, and Broadcast Address?
Let's write both in binary:
130.45.34.36 = 10000010.00101101.00100010.00100100
255.255.240.0 = 11111111.11111111.11110000.00000000
A bitwise AND between the two would give us the network address:
10000010.00101101.00100010.00100100 (ip address)
AND
11111111.11111111.11110000.00000000 (subnet mask)
=
10000010.00101101.00100000.00000000 = 130.45.32.0 (the resulting network address)
A bitwise OR between the network address and the inverted subnet mask would give us the broadcast address:
10000010.00101101.00100000.00000000 (netadress)
OR
00000000.00000000.00001111.11111111 (inverted subnet mask)
=
10000010.00101101.00101111.11111111 = 130.45.47.255 (broadcast address)
var network = calculateNetworkIP("192.168.0.101", "255.255.255.0");
var broadcast = calculateBroadcastIP("192.168.0.101", "255.255.255.0");
function calculateNetworkIP(ipAddress, maskIP){
var binaryIP = convertIPToBinaryIP(ipAddress);
var maskBinaryIP = convertIPToBinaryIP(maskIP);
var binaryNetwork = [];
for (var j = 0; j < maskBinaryIP.length; j++) {
binaryNetwork.push(bitwiseAND(binaryIP[j], maskBinaryIP[j]));
}
var NetworkIPArr = convertBinaryIPToDecIP(binaryNetwork);
var NetworkIPStr = "";
for (var k = 0; k < NetworkIPArr.length; k++) {
NetworkIPStr += NetworkIPArr[k]+".";
}
return NetworkIPStr.slice(0, -1);
}
function calculateBroadcastIP(ipAddress, maskIP){
var binaryIP = convertIPToBinaryIP(ipAddress);
var maskBinaryIP = convertIPToBinaryIP(maskIP);
var invertedMark = [];
for (var i = 0; i < maskBinaryIP.length; i++) {
invertedMark.push(invertedBinary(maskBinaryIP[i]));
}
var binaryBroadcast = [];
for (var j = 0; j < maskBinaryIP.length; j++) {
binaryBroadcast.push(bitwiseOR(binaryIP[j], invertedMark[j]));
}
var broadcastIPArr = convertBinaryIPToDecIP(binaryBroadcast);
var broadcastIPStr = "";
for (var k = 0; k < broadcastIPArr.length; k++) {
broadcastIPStr += broadcastIPArr[k]+".";
}
return broadcastIPStr.slice(0, -1);
}
function invertedBinary(number){
var no = number+"";
var noArr = no.split("");
var newNo = "";
for(var i = 0; i < noArr.length; i++){
if(noArr[i] == "0"){
newNo += "1";
}else{
newNo += "0";
}
}
return newNo;
}
function bitwiseAND(firstBinary, secondBinary){
var firstArr = [];
var secondArr = [];
firstArr = firstBinary.split("");
secondArr = secondBinary.split("");
var newAdded = "";
for(var i = 0; i < firstArr.length; i++){
if(firstArr[i]+"+"+secondArr[i] == "1+0"){
newAdded += "0";
}else if(firstArr[i]+"+"+secondArr[i] == "0+1"){
newAdded += "0";
}else if(firstArr[i]+"+"+secondArr[i] == "1+1"){
newAdded += "1";
}else if(firstArr[i]+"+"+secondArr[i] == "0+0"){
newAdded += "0";
}
}
return newAdded;
}
function bitwiseOR(firstBinary, secondBinary){
var firstArr = [];
var secondArr = [];
firstArr = firstBinary.split("");
secondArr = secondBinary.split("");
var newAdded = "";
for(var i = 0; i < firstArr.length; i++){
if(firstArr[i]+"+"+secondArr[i] == "1+0"){
newAdded += "1";
}else if(firstArr[i]+"+"+secondArr[i] == "0+1"){
newAdded += "1";
}else if(firstArr[i]+"+"+secondArr[i] == "1+1"){
newAdded += "1";
}else if(firstArr[i]+"+"+secondArr[i] == "0+0"){
newAdded += "0";
}
}
return newAdded;
}
function convertBinaryIPToDecIP(binaryIPArr){
var broadcastIP = [];
for (var i = 0; i < binaryIPArr.length; i++) {
broadcastIP.push(parseInt(parseInt(binaryIPArr[i]), 2));
}
return broadcastIP;
}
function convertIPToBinaryIP(ipAddress) {
var ipArr = ipAddress.split(".");
var binaryIP = [];
for (var i = 0; i < ipArr.length; i++) {
var binaryNo = parseInt(ipArr[i]).toString(2);
if(binaryNo.length == 8){
binaryIP.push(binaryNo);
}else{
var diffNo = 8 - binaryNo.length;
var createBinary = '';
for (var j = 0; j < diffNo; j++) {
createBinary += '0';
}
createBinary += binaryNo;
binaryIP.push(createBinary);
}
}
return binaryIP;
}
Code example based on Malt's answer:
const
ipadr = '130.45.34.36',
subnet = '255.255.240.0',
ipadrs = ipadr.split('.'),
subnets = subnet.split('.');
let networks = [],
broadcasts = [];
for (let i in ipadrs) {
networks[i] = ipadrs[i] & subnets[i];
}
console.log('netaddress: ', networks.join('.')) // netaddress: 130.45.32.0
for (let i in networks) {
broadcasts[i] = networks[i] | ~subnets[i] + 256;
}
console.log('broadcast address: ', broadcasts.join('.')) // broadcast address: 130.45.47.255
Another short cut for broadcast address calculation after getting netwotk address is:
calculate total no of hosts (in this case it is 2^12 = 4096)
Divide it by 256(in this case it is 16) and add the result - 1(in this case 15) in *corresponding octet(in this case second octet i.e. 32+15=47) and make other octet 255
*we can get the corresponding octet by looking at the no of hosts. e.g if the no of hosts are greater than 256 then we have to add it to the 2nd octet of network address and so on
typescript version
function getBroadcastAddress({ address, netmask }: NetworkInterfaceInfo) {
const addressBytes = address.split(".").map(Number);
const netmaskBytes = netmask.split(".").map(Number);
const subnetBytes = netmaskBytes.map(
(_, index) => addressBytes[index] & netmaskBytes[index]
);
const broadcastBytes = netmaskBytes.map(
(_, index) => subnetBytes[index] | (~netmaskBytes[index] + 256)
);
return broadcastBytes.map(String).join(".")
}
/*
// test
getBroadcastAddress({ address: "192.168.1.93", netmask: "255.255.255.0" }) == '192.168.1.255'
*/
© 2022 - 2024 — McMap. All rights reserved.