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'));