/**
* @fileOverview according to the Ip address and the netMask address,to get network address,broadcast address and address range.
* @author Spring@foreverTrusts.com
* @example
* var myNetwork = new myNetworkInterface('192.168.100.5','255.255.255.0');
* if(myNetwork.validateIpAddress() && myNetwork.validateNetmask()){
* var network = myNetwork.getNetwork();
* var broadcast = myNetwork.getBroadcast();
* //address range: firstHost ~ LasttHost
* var firstHost = this.getAddressRangeStart();
* var LasttHost = this.getAddressRangeLast();
*
* }
*
* @version 0.0.1
*/
/**
* @description myNetworkInterface class
* @constructor myNetworkInterface
* @param {String} ip Ip address
* @param {String} netmask netMask addresss
*/
var myNetworkInterface = function(ip,netmask){
/**
* @description {String} ip address
* @field
*/
this.ip = ip;
/**
* @description {String} netmask address
* @field
*/
this.netmask = netmask;
/**
* @description validate ip address,new RegExp(reg)
* @method validateIpAddress()
* @return {boolean} true/yes or false/no
* @deprecated
* @ignore
*/
this.validateIpAddress = function(){
var ip = this.getIpAddress();
var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
if(!new RegExp(reg).test(ip)){
return false;
}else{
return true;
}
};
/**
* @description validate netmask,new RegExp(reg)
* @method validateNetmask()
* @return {boolean} true/yes or false/no
* @deprecated
* @ignore
*/
this.validateNetmask = function(){
var netmask = this.getNetmask();
var reg = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/;
if(!new RegExp(reg).test(netmask)){
return false;
}else{
return true;
}
};
/**
* @description split address such as "192.168.1.25" to array,separator: ".",and return ['192','168','1','25']
* @method splitAddress(str)
* @param {String} str address string
* @return {Array} addressArr
*/
this.splitAddress = function(str){
var addressArr = new Array();
addressArr = str.split('.');
return addressArr;
};
/**
* @description converted to a 8 bit binary digit,
* @method convertedToBinary(addr)
* @param {String} addr string of decimal digit that a part of address,such as '192'
* @return {String} result such as '11000000'
*/
this.convertedToBinary = function(addr){
return (parseInt(addr) + 256).toString(2).substring(1);
};
/**
* @description
* @method convertedToBinaryArr(arr)
* @param {Array<String>} arr an array of strings that consisting of decimal digits,such as ['192','168','1','25']
* @return {Array<String>} result an array of strings that consisting of binary digits,such as["11000000", "10101000", "01100100", "00000101"]
*/
this.convertedToBinaryArr = function(arr){
for(var i=0;i<arr.length;i++){
arr[i] = this.convertedToBinary(arr[i])
}
return arr;
};
/**
* @description join an array into a string
* @method arrJoinToString(arr)
* @param {Array<String>} arr such as ['11111111','11111111','11111111','00000000']
* @return {String} result such as "11111111111111111111111100000000"
*/
this.arrJoinToString = function(arr){
var address = '';
address = arr.join('');
return address;
};
/**
* @description get the index of the host address that the part of NetMask address
* @method getHostIndexOfNetmask(netMask)
* @param {String} netmask string of netMask that has been join into a binary such as "11111111111111111111111100000000"
* @return {Number} result example 24
*/
this.getHostIndexOfNetmask = function(netmask){
return netmask.indexOf('0');
};
/**
* @deprecated
* @ignore
*/
this.getHostLenghtOfNetmask = function(netmask,hostIndex){
return address.length - hostIndex;
};
/**
* @description '&' operation operation
* @method andOperation(val1,val2)
* @param {String} val1
* @param {String} val2
* @return {Number} result
*/
this.andOperation = function(val1,val2){
return parseInt(val1) & parseInt(val2);
};
/**
* @description '&' operation,ip & netMask to get network address
* @method getNetworkArr(ipArr,netmaskArr)
* @param {Array<String>} ipArr ip address array,such as ['192','168','1','25']
* @param {Array<String>} nermaskArr netMask array,such as ['255','255','255','0']
* @return {Array<Number>} result network array,such as [192,168,100,0]
*/
this.getNetworkArr = function(ipArr,netmaskArr){
var network = new Array();
for(var i=0;i<4;i++){
network[i] = this.andOperation(ipArr[i],netmaskArr[i]);
}
return network;
};
/**
* @description format address,join array to a string with '.',
* @method formatAddress(arr) such as [192,168,100,0]
* @param {Array} arr such as [192,168,100,0]
* @return {String} address such as '192.168.100.0'
*/
this.formatAddress = function(arr){
var address = '',
address = arr.join('.');
return address;
};
/**
* @description get broadcast address string
* @method getBrodcastBinaryString(network,hostIndex)
* @param {String} network string of network that consisting of binary digit,such as '11000000101010000110010000000000'
* @param {Number} hostIndex the index of the host address that the part of network ,such 24
* @return {String} broadcast string of network that consisting of binary digit,such as '11000000101010000110010011111111'
*/
this.getBrodcastBinaryString = function(network,hostIndex){
var broadcast = '';
var netAddrOfnetwork = network.substring(0,hostIndex);
var hostOfnetwork = network.substring(hostIndex,network.length);
hostOfnetwork = hostOfnetwork.replace(/\d/g,'1');//replace the host address the part of the network address to '1'
broadcast = netAddrOfnetwork + hostOfnetwork;
return broadcast;//return broadcast address
};
/**
* @description get broadcast address binary array by split broadcast binary string
* @method getBroadcastBinaryArr(str)
* @param {String} str broadcast binary string,such as '11000000101010000110010011111111'
* @return {Array} result broadcast binary array,such as ['11000000','10101000','01100100','11111111']
*/
this.getBroadcastBinaryArr = function(str){
var len = 8;
var broadcastArr = new Array(4);
for(var i = 0;i<4;i++){
broadcastArr[i] = str.substr(i*len,len);
}
return broadcastArr;
};
/**
* @description get broadcast address and format it
* @method formatBoradcast(arr)
* @param {Array} arr broadcast binary array,such as ['11000000','10101000','01100100','11111111']
* @return {String} result broadcast address,such as 192.168.100.255
*/
this.formatBoradcast = function(arr){
for(var i=0;i<arr.length;i++){
arr[i] = parseInt(arr[i],2);
}
return this.formatAddress(arr);
};
};
myNetworkInterface.prototype = {
/**
* @description set ip address
* @method setIpAddress(ip)
* @param {String} ip
*/
setIpAddress : function(ip){
this.ip = ip;
},
/**
* @description return ip address
* @method getIpAddress()
* @returns ip
*/
getIpAddress : function(){
return this.ip;
},
/**
* @description set netMask
* @method setNetmask(netmask)
* @param {String} netmask
*/
setNetmask : function(netmask){
this.netmask = netmask;
},
/**
* @description return nermask
* @method getNetmask()
* @returns {String} netmask
*/
getNetmask : function(){
return this.netmask;
},
/**
* @description public function,get network address
* @method getNetwork()
* @return {String} network
*/
getNetwork : function(){
var ip = this.getIpAddress();
var netmask = this.getNetmask();
var ipArr = this.splitAddress(ip);
var netmaskArr = this.splitAddress(netmask);
var networkArr = this.getNetworkArr(ipArr,netmaskArr);
var network = this.formatAddress(networkArr);
return network;
},
/**
*@description public function,get broadcast address
*@method getBroadcast()
*@return {String} broadcast
*/
getBroadcast : function(){
var netmask = this.getNetmask();
var netmaskArr = this.splitAddress(netmask);
var netmaskBinaryArr = this.convertedToBinaryArr(netmaskArr);
var netmaskString = this.arrJoinToString(netmaskBinaryArr);
var hostIndexOfNetmask = this.getHostIndexOfNetmask(netmaskString);
var network = this.getNetwork();
var networkArr = this.splitAddress(network);
var networkBinaryArr = this.convertedToBinaryArr(networkArr);
var networkstring = this.arrJoinToString(networkBinaryArr);
var broadcaststring = this.getBrodcastBinaryString(networkstring,hostIndexOfNetmask);
var broadcastArr = this.getBroadcastBinaryArr(broadcaststring);
var broadcast = this.formatBoradcast(broadcastArr);
return broadcast;
},
/**
* @description public function,get the first host address of address range
* @method getAddressRangeStart()
* @return {String} result the first address of address range
*/
getAddressRangeStart : function(){
var network = this.getNetwork();
var networkArr = this.splitAddress(network);
networkArr[3] = (parseInt(networkArr[3]) + 1).toString();
var firstHost = this.formatAddress(networkArr);
return firstHost;
},
/**
* @description public function ,get the last host address of the address range
* @method getAddressRangeLast()
* @return {String} result the last address of address range
*/
getAddressRangeLast : function(){
var broadcast = this.getBroadcast();
var broadcastArr = this.splitAddress(broadcast);
broadcastArr[3] = (parseInt(broadcastArr[3]) - 1).toString();
var lastHost = this.formatAddress(broadcastArr);
return lastHost;
},
/**
* @description test
* @deprecated
* @ignore
*/
test : function(){
var network = this.getNetwork();
var broadcast = this.getBroadcast();
var firstHost = this.getAddressRangeStart();
var lastHost = this.getAddressRangeLast();
console.log(network,broadcast,firstHost,lastHost);
}
}
利用ip和netmask计算相关地址的js实现
最新推荐文章于 2024-08-14 10:06:53 发布