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编程语言开发动态WAP页面
Oct 09 PHP
PHP脚本的10个技巧(8)
Oct 09 PHP
php,ajax实现分页
Mar 27 PHP
简单的php 验证图片生成函数
May 21 PHP
php中++i 与 i++ 的区别
Aug 08 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
PDO::query讲解
2019/01/29 PHP
javascript 三种编解码方式
2010/02/01 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
js定时器实例分享
2016/12/20 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
Python程序员面试题 你必须提前准备!
2018/01/16 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
双十佳事迹材料
2014/01/29 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
教师个人培训总结
2015/02/11 职场文书
对学校的意见和建议
2015/06/04 职场文书
大学生受助感言
2015/08/01 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis