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与SQL注入攻击[一]
Apr 17 PHP
PHP中MVC模式的模板引擎开发经验分享
Mar 23 PHP
下拉列表多级联动dropDownList示例代码
Jun 27 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
C#静态方法与非静态方法实例分析
Sep 22 PHP
CI框架安全类Security.php源码分析
Nov 04 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 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写UltraEdit插件脚本实现方法
2011/12/26 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
javascript document.referrer 用法
2009/04/30 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
pandas.cut具体使用总结
2019/06/24 Python
Django框架模板用法入门教程
2019/11/04 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
Python 中如何写注释
2020/08/28 Python
Python request post上传文件常见要点
2020/11/20 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
网络方面基础面试题
2012/11/16 面试题
了解AppleTalk协议吗
2014/04/01 面试题
经理助理岗位职责
2014/03/05 职场文书
路政管理求职信
2014/06/18 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
城南旧事观后感
2015/06/11 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python
python实现简单石头剪刀布游戏
2021/10/24 Python