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 编写的 25个游戏脚本
May 11 PHP
php 代码优化之经典示例
Mar 24 PHP
PHP源码之explode使用说明
Aug 05 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
PHP内核探索之变量
Dec 22 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
老生常谈PHP面向对象之解释器模式
May 17 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 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
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python实现统计代码行数的方法
2015/05/22 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python中map的基本用法示例
2018/09/10 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
应聘教师自荐信
2013/10/12 职场文书
服务承诺书格式
2014/05/21 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby