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 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
php实现的Captcha验证码类实例
Sep 22 PHP
php 删除cookie方法详解
Dec 01 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 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 json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
JavaScript格式化数字的函数代码
2010/11/30 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
python实现连接mongodb的方法
2015/05/08 Python
numpy中的高维数组转置实例
2018/04/17 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
Python如何测试stdout输出
2020/08/10 Python
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
计算机专业学生的自我评价
2013/12/15 职场文书
省文明单位申报材料
2014/05/08 职场文书
老乡聚会通知
2015/04/23 职场文书
python字典的元素访问实例详解
2021/07/21 Python
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL