IP掩码转IP段 JS与php实现

最近有个需求要校验IP掩码与输入的IP段是否重复,然后全网各种搜,终于集各家于大成。好了直接上代码【部分代码不记得出处了,没有标注,还望原作者见谅】

【JS部分】

//IP转成整型
function _ip2int(ip) 
{
  var num = 0;
  ip = ip.split(".");
  num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]);
  num = num >>> 0;
  return num;
}

//整型解析为IP地址
function _int2iP(num) 
{
  var str;
  var tt = new Array();
  tt[0] = (num >>> 24) >>> 0;
  tt[1] = ((num << 8) >>> 24) >>> 0;
  tt[2] = (num << 16) >>> 24;
  tt[3] = (num << 24) >>> 24;
  str = String(tt[0]) + "." + String(tt[1]) + "." + String(tt[2]) + "." + String(tt[3]);
  return str;
}
//ip掩码转IP段
function subnet_mask_change_ip_segment(ip_str) {
    mark_len = 32;
    if (ip_str.search("/")!=-1) {
        var strs= new Array(); 
        strs=ip_str.split("/"); 
    }
    ip = _ip2int(strs[0]);
    mark_len = strs[1];
    mark = 0xFFFFFFFF << (32 - mark_len) & 0xFFFFFFFF;
    ip_start = ip & mark;
    ip_end = ip | (~mark) & 0xFFFFFFFF;
    return _int2iP(ip_start) +'-'+ _int2iP(ip_end);
}

var ip_str_du = subnet_mask_change_ip_segment("47.107.170.66/24");

document.write(ip_str_du,'<br>'); 

【PHP部分】

/**ip掩码转IP段
     * @param $ip_str
     * @return string
     */
    function subnet_mask_change_ip_segment($ip_str) {
        $mark_len = 32;
        if (strpos($ip_str, "/") > 0) {
            list($ip_str, $mark_len) = explode("/", $ip_str);
        }
        $ip = ip2long($ip_str);
        $mark = 0xFFFFFFFF << (32 - $mark_len) & 0xFFFFFFFF;
        $ip_start = $ip & $mark;
        $ip_end = $ip | (~$mark) & 0xFFFFFFFF;
        return long2ip($ip_start).'-'.long2ip($ip_end);
    }
  var_dump(
subnet_mask_change_ip_segment('47.107.170.66/24'));

 

posted @ 2019-08-05 10:50  书单喵  阅读(676)  评论(0编辑  收藏  举报
Live2D