php计算ip掩码,PHP对IP段解析的方法(子网掩码,广播地址,可用IP数,兼容32位)

最近需要做一个功能方便系统管理员通过ip段地址很清楚的了解到该ip段的子网掩码,广播地址,可用IP数,可用IP开始,可用IP结束等。现在做的是当点击检测IP段按钮的时候使用ajax去取数据之后渲染到页面。

备注:dodo使用的是Yii框架,这里贴出来的是控制器和视图层的部分.若需要采用,请适当的调整优化。

d4e021c52e029c47f324f316d5f05129.png

/* 检测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"]

IP段:

示例: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('

子网掩码'+data.subnet_mask+''+

'

可用IP数目'+data.avi_num+''+

'

可用IP开始'+data.ip_start+''+

'

可用IP结束'+data.ip_end+''+

'

子网地址'+data.nw+''+

'

广播地址'+data.bc+'');

});

return false;

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值