php求一个网段开始与结束IP地址的方法


Posted in PHP onJuly 09, 2015

本文实例讲述了php求一个网段开始与结束IP地址的方法。分享给大家供大家参考。具体如下:

比如:网段(192168.1.5/24),其子网掩码根据24划分为:
11111111.11111111.11111111.00000000(255.255.255.0)
说明:IP地址为32bits,24在划分网段中就表示前面有24个1,后面有8个0.
开始IP地址的算法是:192.168.1.5的二进制与子网掩码的二进制进行“与”运算出来的。
结束IP地址的算法是:子网掩码的二进制先取反,然后和192.168.1.5的二进制进行“或”运算
实际的就应用中,那样得出的是网络地址和广播地址,网络地址+1才是第一个主机地址,广播地址-1为最后一个主机地址。

<?php
function mask2bin($n)
{
  $n = intval($n);
  if($n<0||$n>32) 
  die('error submask');
  return str_repeat("1", $n).str_repeat("0",32-$n);
}
function revBin($s)
{
  $p=array('0','1','2');
  $r=array('2','0','1');
 
  return str_replace($p,$r,$s);
}
function startIp($str,$bSub)
{
  $bIp = decbin($str);
  $bIp = str_pad($bIp,8,"0",STR_PAD_LEFT);
  $sIp = bindec($bIp & $bSub);
  return $sIp;
}
function endIp($str,$bSub)
{
  $bIp = decbin($str);
  $bIp = str_pad($bIp,8,"0",STR_PAD_LEFT);
  $eIp = bindec($bIp | revBin($bSub));
  return $eIp;
}
$ip = array('192','168','1','5');//设定IP地址,可以从表单获取,这里只作演示
$mask = '24';          //设置掩码
$bSub = mask2bin($mask);     //将子网掩码转换二进制
$mask = array();
$mask[] = substr($bSub,"0",8);  //将子网掩码每8位分一段
$mask[] = substr($bSub,"8",8);
$mask[] = substr($bSub,"16",8);
$mask[] = substr($bSub,"24",8);
echo '<table summary="result" border="1" cellspacing="1" cellpadding="0" >
 <tbody>
  <td align="right" ><font size="2">掩码:</font></td>
  <td>
  <font size="2">';
for ($i=0;$i<4;$i++)
{
  echo bindec($mask[$i]);
  if($i!=3)
  echo ".";
}
echo '</font>
  </td>
  </tr>
 <tr>
  <td align="right"><font size="2">网络地址:</font></td>
  <td>
  <font size="2">';
  for ($i=0;$i<4;$i++)
  {
   echo startIp($ip[$i],$mask[$i]);
   if($i!=3)
   echo ".";
  }
echo '</font> 
  </td>
  </tr>
    </td>
  </tr>
 <tr>
  <td align="right"><font size="2">第一个可用:</font></td>
  <td>
  <font size="2">';
  for ($i=0;$i<3;$i++)
  {   
   echo startIp($ip[$i],$mask[$i]);  
   echo ".";
  }
  $ip_4 = startIp($ip[3],$mask[3]);
  echo ++$ip_4;
  echo '</font> 
  </td>
  </tr>
 <tr>
  <td align="right"><font size="2">最后可用:</font></td>
  <td>
  <font size="2">';
  for ($i=0;$i<3;$i++)
  {
   echo endIp($ip[$i],$mask[$i]);
   echo ".";
  }
  $ip_4 = endIp($ip[3],$mask[3]);
  echo --$ip_4;
echo '
  </font>
  </td>
  </tr>
 <tr>
  <td align="right"><font size="2">广播地址:</font></td>
  <td>
  <font size="2">';
  for ($i=0;$i<4;$i++)
  {
   echo endIp($ip[$i],$mask[$i]);
   if($i!=3)
   echo ".";
  }
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
PHP常用技巧汇总
Mar 04 PHP
php语言的7种基本的排序方法
Dec 28 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
php微信公众号开发之简答题
Oct 20 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
如何在PHP中使用数组
Jun 09 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 #PHP
php将金额数字转化为中文大写
Jul 09 #PHP
php实现的简易扫雷游戏实例
Jul 09 #PHP
php链表用法实例分析
Jul 09 #PHP
php结合curl实现多线程抓取
Jul 09 #PHP
php基本函数汇总
Jul 09 #PHP
php+curl 发送图片处理代码分享
Jul 09 #PHP
You might like
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
PHP加密解密函数详解
2015/10/28 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
javascript中的new使用
2010/03/20 Javascript
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
Python函数和模块的使用总结
2019/05/20 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
python是否适合网页编程详解
2019/10/04 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
python实现简单文件读写函数
2021/02/25 Python
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
畜牧兽医本科生的自我评价
2014/03/03 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
端午节寄语2015
2015/03/23 职场文书
关于Redis的主从复制及哨兵问题
2022/06/16 Redis