欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS 根據(jù)子網掩碼,網關計算出所有IP地址范圍示例

 更新時間:2020年04月23日 14:15:55   作者:gentsir  
這篇文章主要介紹了JS 根據(jù)子網掩碼,網關計算出所有IP地址范圍,涉及IP地址、子網的正則驗證,子網掩碼計算等相關操作技巧,需要的朋友可以參考下
// 驗證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]?)$/;

// 驗證子網掩碼的正則
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地址轉換成二進制格式*  @param string  ip  待轉換的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 '';
}

/***  把二進制格式轉換成IP地址*  @param string  binary  待轉換的二進制  */
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ù)子網掩碼和網關計算網絡地址和廣播地址*  @param string  mask  子網掩碼*  @param string  gateway 網關*/
function get_network_broadcast_addr(mask, gateway)
{
  network_broadcast = [];
  network_addr = "";
  
  mask_arr = mask.split(".");
  ip_arr = ip.split(".");
  
  // 計算IP的網絡地址 與(&)運算
  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);

  // 計算廣播地址
  // 子掩碼后面有幾個0,就去掉IP地址后幾位再補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地址后位補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];
  }
}

/***  獲取由網絡地址和廣播址組成的所有IP組合*  @param string  network_addr  網絡地址*  @param string  broadcast_addr 廣播地址*  @param string  gateway     網關*/
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起計
      for (var j = min; j <= max; j++) {
        temp.push(j);
      }
      range[i] = temp;
    }
  }

  ip_list = doExchange(range);
  ip_list.shift(); // 去掉網絡地址
  ip_list.pop(); // 去掉廣播地址
  gateway_index = -1;
  
  // 去掉網關
  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:這里再為大家推薦幾款相關在線工具供大家參考:

在線網絡計算器|TCP/IP子網掩碼計算與換算工具:
http://tools.jb51.net/aideddesign/ipcalc

在線IP地址/子網掩碼計算與轉換工具:
http://tools.jb51.net/aideddesign/ip_net_calc

在線子網掩碼換算與網絡計算工具:
http://tools.jb51.net/aideddesign/network_calc

相關文章

  • js獲取會話框prompt的返回值的方法

    js獲取會話框prompt的返回值的方法

    這篇文章主要介紹了js獲取會話框prompt的返回值的方法,通過一個簡單的密碼判斷實例分析了js獲取會話框prompt返回值的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-01-01
  • 分享ES6的7個實用技巧

    分享ES6的7個實用技巧

    本文給大家分享了es6的7個實用技巧,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2018-01-01
  • JS+CSS實現(xiàn)的簡單折疊展開多級菜單效果

    JS+CSS實現(xiàn)的簡單折疊展開多級菜單效果

    這篇文章主要介紹了JS+CSS實現(xiàn)的簡單折疊展開多級菜單效果,涉及JavaScript頁面元素的遍歷及動態(tài)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • OpenLayers加載縮放控件使用方法詳解

    OpenLayers加載縮放控件使用方法詳解

    這篇文章主要為大家詳細介紹了OpenLayers加載縮放控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 淺談 Mousewheel 事件

    淺談 Mousewheel 事件

    當需要制作轉動鼠標滾輪放大頁面字體這樣的交互效果時,會用到 Mousewheel 事件。
    2010-09-09
  • 原生JS實現(xiàn)風箱式demo,并封裝了一個運動框架(實例代碼)

    原生JS實現(xiàn)風箱式demo,并封裝了一個運動框架(實例代碼)

    下面小編就為大家?guī)硪黄鶭S實現(xiàn)風箱式demo,并封裝了一個運動框架(實例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JS控制表單提交的方法

    JS控制表單提交的方法

    這篇文章主要介紹了JS控制表單提交的方法,可實現(xiàn)基于javascript提交表單信息的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 微信小程序繪制半圓(弧形)進度條

    微信小程序繪制半圓(弧形)進度條

    這篇文章主要為大家詳細介紹了微信小程序繪制半圓(弧形)進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • js跳轉頁面方法總結

    js跳轉頁面方法總結

    本篇文章主要是對js跳轉頁面方法進行了詳細的總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • js獲取指定的cookie的具體實現(xiàn)

    js獲取指定的cookie的具體實現(xiàn)

    使用js獲取cookie或許你會,但是要獲取指定cookie,你會嗎?下面有個不錯的示例,大家可以參考下
    2014-02-02

最新評論