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 相关文章推荐
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
php_pdo 预处理语句详解
Nov 21 PHP
Zend Framework常用校验器详解
Dec 09 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 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中文乱码
2009/11/26 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP如何将XML转成数组
2016/04/04 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
初学Javascript的一些总结
2008/11/03 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python 对象中的数据类型
2017/05/13 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
工艺工程师工作职责
2013/11/23 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
职工趣味运动会方案
2014/02/10 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
2015年药房工作总结
2015/04/25 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python