PHP对IP段解析的方法(子网掩码,广播地址,可用IP数,兼容32位)
- 8659
- PHP
- 0
- super_dodo
- 2013/11/08
最近需要做一个功能方便系统管理员通过ip段地址很清楚的了解到该ip段的子网掩码,广播地址,可用IP数,可用IP开始,可用IP结束等。现在做的是当点击检测IP段按钮的时候使用ajax去取数据之后渲染到页面。
备注:dodo使用的是Yii框架,这里贴出来的是控制器和视图层的部分.若需要采用,请适当的调整优化。
/* 检测IP段内IP段地址(192.168.1.10/24)
* 传入Ip地址对Ip段地址进行处理得到相关的信息
*/
public function actionCheckIps($ip_addr) {
$ip_addr = str_replace(" ","",$ip_addr); //去除字符串中的空格
$arr = explode('/',$ip_addr); //对IP段进行解剖
$ip_addr = $arr[0]; //得到IP地址
$netbits = intval($arr[1]); //得到掩码位
$subnet_mask = long2ip(ip2long("255.255.255.255") << (32 - $netbits)); $ip = ip2long($ip_addr); $nm = ip2long($subnet_mask); $nw = ($ip & $nm); $bc = $nw | (~$nm); $ips = array(); $ips['subnet_mask'] = long2ip($nm); //子网掩码 $ips['avi_num'] = ($bc - $nw - 1); //可用IP数目 if($ips['avi_num'] <= 0){ $ips['avi_num'] += 4294967296; } $ips['ip_start'] = long2ip($nw + 1); //可用IP开始 $ips['ip_end'] = long2ip($bc - 1); //可用IP结束 if($bc <= 0) $bc += 4294967296; //修复32位服务器和64位服务的差别 if($nw <= 0) $nw += 4294967296; //32位long2ip后会出现负数 // $bc = sprintf('%u',$bc); //或者采用此方法转换成无符号的 // $nw = sprintf('%u',$nw); $ips['nw'] = long2ip($nw); //子网地址 $ips['bc'] = long2ip($bc); //广播地址 echo json_encode($ips); //返回JSON格式方便前端AJAX处理 } [/php] 前端HTML页面用于用户操作和信息展示 [code lang="html"]
示例:192.168.1.10/24 (中间不需要空格)
[/code]
前端jQuery使用ajax去获取数据
$("#chk_ips").click(function(){ $('.ips_info').empty(); var ip_addr = $("#ips").val(); if(ip_addr == '') return false; $.getJSON("/checkIps", {ip_addr:$("#ips").val()}, function(data){ $('.ips_info').html('<tr class="even"><td class="ips_tit">子网掩码</td><td class="ips_tip">'+data.subnet_mask+'</td>'+ '<td class="ips_tit">可用IP数目</td><td class="ips_tip">'+data.avi_num+'</td></tr>'+ '<tr><td class="ips_tit">可用IP开始</td><td class="ips_tip">'+data.ip_start+'</td>'+ '<td class="ips_tit">可用IP结束</td><td class="ips_tip">'+data.ip_end+'</td></tr>'+ '<tr class="even"><td class="ips_tit">子网地址</td><td class="ips_tip">'+data.nw+'</td>'+ '<td class="ips_tit">广播地址</td><td class="ips_tip">'+data.bc+'</td></tr>'); }); return false; });
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例