PHP小程序,子网掩码长度的计算

 

开发中遇到一个小需求,就是把国内的网段,纳入到公司服务器的IP地址白名单里:

比如电信的地址是这样的: 

给出了每个网段的网络地址和广播地址(其实就是每个网段的第一个地址和最后一个地址),网页上提供了文件下载

 

而服务器里设置过滤规则是这样的:

比如: 192.168.1.0/24

 

所以我就需要些一个小程序,完成上面的转换:

下面是小程序的demo:

<?php

//子网掩码长度计算
function submaskLength($ip,$ip2){
$str = decbin(ip2long($ip));
$str2 = decbin(ip2long($ip2));
for ($i=0; $i < 32; $i++) { 
   $strChar = substr($str, $i,1);
   $strChar2 = substr($str2, $i,1);
   //echo $strChar,',',$strChar2,'<br/>';
   if (strcmp($strChar,$strChar2)) {
      break;
   }
}
return $i;
}

$ip = '192.168.1.1';
$ip2 = '192.168.1.255';

echo submaskLength($ip,$ip2);

?>

 

后来,此需求取消了,也就没有继续研究下去.不知道php里面有没有相应的函数

水平有限,也就写成这样了,分享一下!

转载于:https://www.cnblogs.com/dsfree/p/8058654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于VLSM(可变长度子网掩码)的计算 我们先来理解以下概念: 子网:IP地址均分为网络位和主机位两段,假设一个网络中的主机为450台,那么分配一个C类地址不够用,分配一个B类地址又显得太浪费,在这种情况下,就提出了子网化的概念,子网的定义就是把主机地址中的一部分主机位借用为网络位。如在一个B类地址172.16/16,可以借用7位做为网络地址,一个形如172.16.2/23的地址段就可以满足该网络的需求。其中172.16/16称为主网,172.16.2/23称为子网。 超网:子网化一定程度上减轻了IP地址空间紧张的压力,但是由于在IP地址分配初期的考虑不周全,导致A类、B类地址在初其大量分配,资源相当紧张,而一些中型网络又需要超过一个C的地址,这进只能分配几个连续的C类地址块。为了减小Internet路由表的数量,就提出了超网的概念,超网和子网的定义刚好相反,就是借用一部网络位作为主机位。从而达到减小Internet路由表的目的。如192.168.0/24-192.168.3/24四个C类地址段,就是可超网化为192.168.0/22这样一个超网。 CIDR(无类型域间路由):随着子网和超网概念的深入,IANA在分配IP地址过程中类别的概念越来越淡化,一般情况下就直接以地址块的形式分配地址段,配合路由设备的支持,就出现了无类型域间路由的概念。它是一种工业标准,与IP地址一起使用的,用来显示子网位数。例如,172.16.10.1/24就表示32位子网掩码中有24个1。 简单的说凡是借了位就用到了CIDR, 借少了位叫超网,比如:192.168.1.0/22 借多了位叫VLSM,比如:192.168.1.0/28

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值