IP格式转换功能代码分享

/*
*
*最近在工作当中遇到一个IP转换的功能,需要对各种格式ip进行转换求出IP的取值范围,换成aaa.bbb.ccc.ddd的形式
*需要转换的数据格式有:
*(1)192.168.1.0/15
*(2)192.168.1.0/255.255.255.0
*(3)10000300-11000000
*
*在实现功能的时候,用到下面两个方法,分享给大家。(方法来自同事的分享)
*
*/




//该方法是根据IP+网络位数来计算IP的区间范围
//举例数据:192.168.1.0/15
function ip_parse($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 array($ip,$mark,$ip_start,$ip_end);


}


list($ip,$mark,$ip_start,$ip_end)=ip_parse('192.168.1.0/15');
echo "IP".long2ip($ip)."\n";
echo "子网掩码".long2ip($mark)."\n";
echo "子网掩码".long2ip($ip_start)."\n";
echo "子网掩码".long2ip($ip_end)."\n";




//该方法是根据IP+子网掩码来计算出Ip的区间范围
//举例数据:192.168.1.0/255.255.255.0


$ip_addr='192.168.1.0';
$subnet_mask='255.255.255.0';
$ip=ip2long($ip_addr);
$nm=ip2long($subnet_mask);
$nw=($ip & $nm);
$bc=$nw | (~$nm);


echo "IP ADDRESS             ".long2ip($ip)."\n";
echo "Subnet Mask            ".long2ip($nm)."\n";
echo "Network Address        ".long2ip($nw)."\n";
echo "Broadcast Address      ".long2ip($bc)."\n";
echo "Host Range             ".long2ip($nw+1)."-".long2ip($bc-1)."\n";


/*
*php内置的关于IP的转换的函数long2ip()和ip2long()
*/
ip2long(string ip_address)   ---将IPv4的地址转换成Int,如果ip地址非法,返回false
long2ip(int proper_address)  ---将Int型表示的ip地址表示成aaa.bbb.ccc.ddd的形式
Tips:
使用ip2long()的时候,返回值是Int,所以地址转换成数字后有可能变成负数,此时我们需要换成无符号的Int;
解决办法:sprintf("%u",ip2long($ip_address));






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值