當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
JS 根据子网掩码,网关计算出所有的IP范围
生活随笔
收集整理的這篇文章主要介紹了
JS 根据子网掩码,网关计算出所有的IP范围
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
// 驗(yàn)證IP的正則
var ip_reg = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;// 驗(yàn)證子網(wǎng)掩碼的正則
var mask_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)$/;/**
* 把IP地址轉(zhuǎn)換成二進(jìn)制格式
* @param string ? ip ? ?待轉(zhuǎn)換的IP的地址
*/ function ip_to_binary(ip) {if (ip_reg.test(ip)) {var ip_str = "",ip_arr = ip.split(".");for (var i = 0; i < 4; i++) {curr_num = ip_arr[i];number_bin = parseInt(curr_num);number_bin = number_bin.toString(2);count = 8 - number_bin.length;for (var j = 0; j < count; j++) {number_bin = "0" + number_bin;}ip_str += number_bin;}return ip_str;}return ''; }/**
* 把二進(jìn)制格式轉(zhuǎn)換成IP地址
* @param string ? binary ? ?待轉(zhuǎn)換的二進(jìn)制
*/ function binary_to_ip(binary) {if (binary.length == 32) {a = parseInt(binary.substr(0, 8), 2);b = parseInt(binary.substr(8, 8), 2);c = parseInt(binary.substr(16, 8), 2);d = parseInt(binary.slice(-8), 2);return a + '.' + b + '.' + c + '.' + d;}return ''; }/**
* 根據(jù)子網(wǎng)掩碼和網(wǎng)關(guān)計(jì)算網(wǎng)絡(luò)地址和廣播地址
* @param ?string ? ?mask ? ?子網(wǎng)掩碼
* @param ?string ? ?gateway 網(wǎng)關(guān)
*/ function get_network_broadcast_addr(mask, gateway) {network_broadcast = [];network_addr = "";mask_arr = mask.split(".");ip_arr = ip.split(".");// 計(jì)算IP的網(wǎng)絡(luò)地址 與(&)運(yùn)算for (var i = 0; i < 4; i++) {number1 = parseInt(mask_arr[i]);number2 = parseInt(ip_arr[i]);network_addr += number1 & number2;if( i < 3 ){network_addr += ".";}}network_broadcast.push(network_addr);// 計(jì)算廣播地址// 子掩碼后面有幾個(gè)0,就去掉IP地址后幾位再補(bǔ)1mask_binary = ip_to_binary(mask);gateway_binary = ip_to_binary(ip);mask_zero = mask_binary.split(0).length - 1;one_number = new Array(mask_zero + 1).join('1'); // IP地址后位補(bǔ)1gateway_hou_wei_bu_yi = gateway_binary.slice(0, -mask_zero) + one_number;network_broadcast.push(binary_to_ip(gateway_hou_wei_bu_yi));return network_broadcast; }// 全排列組合算法(兩兩遞歸組合) function doExchange(doubleArrays) {var len = doubleArrays.length;if(len >= 2){var len1 = doubleArrays[0].length;var len2 = doubleArrays[1].length;var newlen = len1 * len2;var temp = new Array(newlen);var index = 0;for(var i = 0; i < len1; i++){for(var j = 0; j < len2; j++){temp[index] = doubleArrays[0][i] + '.' + doubleArrays[1][j];index++;}}var newArray = new Array(len - 1);for(var i = 2; i < len; i++){newArray[i - 1] = doubleArrays[i];}newArray[0] = temp;return doExchange(newArray);} else{return doubleArrays[0];} }/**
* 獲取由網(wǎng)絡(luò)地址和廣播址組成的所有IP組合
* @param ?string ? ?network_addr ? ?網(wǎng)絡(luò)地址
* @param ?string ? ?broadcast_addr ?廣播地址
* @param ?string ? ?gateway ? ? ? ? 網(wǎng)關(guān)
*/ function return_ip(network_addr, broadcast_addr, gateway) {range = [];start = network_addr.split(".");end = broadcast.split(".");// range格式為[[192], [168], [0,1,2...254], [0,1,2...254]]for (var i = 0; i < 4; i++) {if (start[i] == end[i]) {range[i] = [start[i]];} else {min = Math.min(start[i], end[i]);max = Math.max(start[i], end[i]);temp = [];
if (i == 3) min = 199; // 從200起計(jì)for (var j = min; j <= max; j++) {temp.push(j);}range[i] = temp;}}ip_list = doExchange(range);ip_list.shift(); // 去掉網(wǎng)絡(luò)地址ip_list.pop(); // 去掉廣播地址gateway_index = -1;// 去掉網(wǎng)關(guān)for (var k = 0; k < ip_list.length; k++) {if (ip_list[k] == gateway) {gateway_index = k;break;}}if (gateway_index > -1) {ip_list.splice(gateway_index, 1);}return ip_list; }
* 把IP地址轉(zhuǎn)換成二進(jìn)制格式
* @param string ? ip ? ?待轉(zhuǎn)換的IP的地址
*/ function ip_to_binary(ip) {if (ip_reg.test(ip)) {var ip_str = "",ip_arr = ip.split(".");for (var i = 0; i < 4; i++) {curr_num = ip_arr[i];number_bin = parseInt(curr_num);number_bin = number_bin.toString(2);count = 8 - number_bin.length;for (var j = 0; j < count; j++) {number_bin = "0" + number_bin;}ip_str += number_bin;}return ip_str;}return ''; }/**
* 把二進(jìn)制格式轉(zhuǎn)換成IP地址
* @param string ? binary ? ?待轉(zhuǎn)換的二進(jìn)制
*/ function binary_to_ip(binary) {if (binary.length == 32) {a = parseInt(binary.substr(0, 8), 2);b = parseInt(binary.substr(8, 8), 2);c = parseInt(binary.substr(16, 8), 2);d = parseInt(binary.slice(-8), 2);return a + '.' + b + '.' + c + '.' + d;}return ''; }/**
* 根據(jù)子網(wǎng)掩碼和網(wǎng)關(guān)計(jì)算網(wǎng)絡(luò)地址和廣播地址
* @param ?string ? ?mask ? ?子網(wǎng)掩碼
* @param ?string ? ?gateway 網(wǎng)關(guān)
*/ function get_network_broadcast_addr(mask, gateway) {network_broadcast = [];network_addr = "";mask_arr = mask.split(".");ip_arr = ip.split(".");// 計(jì)算IP的網(wǎng)絡(luò)地址 與(&)運(yùn)算for (var i = 0; i < 4; i++) {number1 = parseInt(mask_arr[i]);number2 = parseInt(ip_arr[i]);network_addr += number1 & number2;if( i < 3 ){network_addr += ".";}}network_broadcast.push(network_addr);// 計(jì)算廣播地址// 子掩碼后面有幾個(gè)0,就去掉IP地址后幾位再補(bǔ)1mask_binary = ip_to_binary(mask);gateway_binary = ip_to_binary(ip);mask_zero = mask_binary.split(0).length - 1;one_number = new Array(mask_zero + 1).join('1'); // IP地址后位補(bǔ)1gateway_hou_wei_bu_yi = gateway_binary.slice(0, -mask_zero) + one_number;network_broadcast.push(binary_to_ip(gateway_hou_wei_bu_yi));return network_broadcast; }// 全排列組合算法(兩兩遞歸組合) function doExchange(doubleArrays) {var len = doubleArrays.length;if(len >= 2){var len1 = doubleArrays[0].length;var len2 = doubleArrays[1].length;var newlen = len1 * len2;var temp = new Array(newlen);var index = 0;for(var i = 0; i < len1; i++){for(var j = 0; j < len2; j++){temp[index] = doubleArrays[0][i] + '.' + doubleArrays[1][j];index++;}}var newArray = new Array(len - 1);for(var i = 2; i < len; i++){newArray[i - 1] = doubleArrays[i];}newArray[0] = temp;return doExchange(newArray);} else{return doubleArrays[0];} }/**
* 獲取由網(wǎng)絡(luò)地址和廣播址組成的所有IP組合
* @param ?string ? ?network_addr ? ?網(wǎng)絡(luò)地址
* @param ?string ? ?broadcast_addr ?廣播地址
* @param ?string ? ?gateway ? ? ? ? 網(wǎng)關(guān)
*/ function return_ip(network_addr, broadcast_addr, gateway) {range = [];start = network_addr.split(".");end = broadcast.split(".");// range格式為[[192], [168], [0,1,2...254], [0,1,2...254]]for (var i = 0; i < 4; i++) {if (start[i] == end[i]) {range[i] = [start[i]];} else {min = Math.min(start[i], end[i]);max = Math.max(start[i], end[i]);temp = [];
if (i == 3) min = 199; // 從200起計(jì)for (var j = min; j <= max; j++) {temp.push(j);}range[i] = temp;}}ip_list = doExchange(range);ip_list.shift(); // 去掉網(wǎng)絡(luò)地址ip_list.pop(); // 去掉廣播地址gateway_index = -1;// 去掉網(wǎng)關(guān)for (var k = 0; k < ip_list.length; k++) {if (ip_list[k] == gateway) {gateway_index = k;break;}}if (gateway_index > -1) {ip_list.splice(gateway_index, 1);}return ip_list; }
?
轉(zhuǎn)載于:https://www.cnblogs.com/gentsir/p/5674320.html
總結(jié)
以上是生活随笔為你收集整理的JS 根据子网掩码,网关计算出所有的IP范围的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ContentProvider的创建和使
- 下一篇: 校外实习-7.15