最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

// 驗證子網(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)換成二進制格式*  @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 '';
}

/***  把二進制格式轉(zhuǎn)換成IP地址*  @param string  binary  待轉(zhuǎ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)計算網(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(".");
  
  // 計算IP的網(wǎng)絡(luò)地址 與(&)運算
  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];
  }
}

/***  獲取由網(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起計
      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ò)計算器|TCP/IP子網(wǎng)掩碼計算與換算工具:
http://tools.jb51.net/aideddesign/ipcalc

在線IP地址/子網(wǎng)掩碼計算與轉(zhuǎn)換工具:
http://tools.jb51.net/aideddesign/ip_net_calc

在線子網(wǎng)掩碼換算與網(wǎng)絡(luò)計算工具:
http://tools.jb51.net/aideddesign/network_calc

相關(guān)文章

最新評論

周宁县| 东丽区| 尼木县| 漳浦县| 衡阳市| 依兰县| 邯郸县| 石河子市| 永泰县| 华坪县| 神池县| 西畴县| 嘉禾县| 庆阳市| 临澧县| 长垣县| 正蓝旗| 封丘县| 新和县| 乳源| 钟祥市| 酉阳| 建阳市| 双桥区| 武定县| 全椒县| 方城县| 唐河县| 鹰潭市| 逊克县| 阿坝| 崇文区| 甘肃省| 井陉县| 沾益县| 大埔县| 惠水县| 宝兴县| 佛学| 威海市| 佳木斯市|