JS 根據(jù)子網(wǎng)掩碼,網(wǎng)關(guān)計(jì)算出所有IP地址范圍示例
// 驗(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ǔ)1
mask_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ǔ)1
gateway_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;
}
PS:這里再為大家推薦幾款相關(guān)在線工具供大家參考:
在線網(wǎng)絡(luò)計(jì)算器|TCP/IP子網(wǎng)掩碼計(jì)算與換算工具:
http://tools.jb51.net/aideddesign/ipcalc
在線IP地址/子網(wǎng)掩碼計(jì)算與轉(zhuǎn)換工具:
http://tools.jb51.net/aideddesign/ip_net_calc
在線子網(wǎng)掩碼換算與網(wǎng)絡(luò)計(jì)算工具:
http://tools.jb51.net/aideddesign/network_calc
- Shell腳本獲取本地網(wǎng)卡IP、mac地址、子網(wǎng)掩碼、dns IP、外網(wǎng)IP
- C++實(shí)現(xiàn)獲取IP、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS等本機(jī)網(wǎng)絡(luò)參數(shù)的方法
- Python實(shí)現(xiàn)根據(jù)IP地址和子網(wǎng)掩碼算出網(wǎng)段的方法
- C#設(shè)置本地網(wǎng)絡(luò)如DNS、網(wǎng)關(guān)、子網(wǎng)掩碼、IP等等
- js針對(duì)ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)的邏輯性判斷
- 網(wǎng)絡(luò)編程基礎(chǔ)(局域網(wǎng)、ip、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS)概念理解
相關(guān)文章
JS+CSS實(shí)現(xiàn)的簡(jiǎn)單折疊展開(kāi)多級(jí)菜單效果
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的簡(jiǎn)單折疊展開(kāi)多級(jí)菜單效果,涉及JavaScript頁(yè)面元素的遍歷及動(dòng)態(tài)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
原生JS實(shí)現(xiàn)風(fēng)箱式demo,并封裝了一個(gè)運(yùn)動(dòng)框架(實(shí)例代碼)
下面小編就為大家?guī)?lái)一篇原生JS實(shí)現(xiàn)風(fēng)箱式demo,并封裝了一個(gè)運(yùn)動(dòng)框架(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07

