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的配置文件php.ini
Oct 09 PHP
精美漂亮的php分页类代码
Apr 02 PHP
PHP图像处理之imagecreate、imagedestroy函数介绍
Nov 19 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
PHP实现倒计时功能
Nov 16 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判断浏览器的类型和语言的函数代码
2013/02/28 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
Javascript中获取出错代码所在文件及行数的代码
2010/09/23 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python zip文件 压缩
2008/12/24 Python
从零学Python之入门(五)缩进和选择
2014/05/27 Python
Python性能优化的20条建议
2014/10/25 Python
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
Python中的choice()方法使用详解
2015/05/15 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
优秀小学生家长评语
2014/01/30 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
敬老院活动感想
2015/08/07 职场文书