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生成静态页
Nov 25 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
php适配器模式介绍
Aug 14 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP生成随机数的方法总结
Mar 01 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 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
构建简单的Webmail系统
2006/10/09 PHP
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
php中$this-&amp;gt;含义分析
2009/11/29 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
深入探究node之Transform
2017/07/20 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
Python中input和raw_input的一点区别
2014/10/21 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
高中毕业自我鉴定
2013/12/19 职场文书
社区服务活动总结
2014/05/07 职场文书
六五普法宣传标语
2014/10/06 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
教师网络培训心得体会
2016/01/09 职场文书
图解上海144收音机
2021/04/22 无线电
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android