利用ip和netmask计算相关地址的js实现

/**
 * @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);
		}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值