php求一个网段开始与结束IP地址的方法_php技巧

本文实例讲述了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
, ip地址
, 结束
, 开始
网段
非法授权ip地址网段、ip地址扫描 跨网段、dhcp跨网段分配ip地址、ip地址网段划分、ip地址网段,以便于您获取更多的相关知识。

时间: 2024-08-26 13:35:21

php求一个网段开始与结束IP地址的方法_php技巧的相关文章

PHP准确取得服务器IP地址的方法_php技巧

本文实例讲述了PHP准确取得服务器IP地址的方法.分享给大家供大家参考.具体分析如下: 在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址. php手册中的解释如下: "HTTP_HOST" 当前请求的 Host: 头信息的内容. 一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量. 然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错. 最后找出原因:$_S

php中获取主机名、协议及IP地址的方法_php技巧

本文实例讲述了php中获取主机名.协议及IP地址的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: $hostname=gethostbyaddr($_SERVER['remote_addr']);    //获取主机名 echo $hostname;            //输出结果 // $hosts=gethostbynamel('localhost');       //获取ip地址列表 print_r($hosts);           //输出数组 // $

php中获取远程客户端的真实ip地址的方法_php技巧

(1).REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 (2).HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 (3).HTTP_CLIENT_IP:客户端的ip 在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址.要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["

php查询ip所在地的方法_php技巧

本文实例讲述了php查询ip所在地的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <?php /** *@ date         2010.12.21 注:文件头 [第一条索引的偏移量 (4byte)] + [最后一条索引的偏移地址 (4byte)]     8字节 记录区 [结束ip (4byte)] + [地区1] + [地区2]                                4字节+不定长 索引区 [开始ip (4byte)] + [指向记录区

js实现一个链接打开两个链接地址的方法_javascript技巧

本文实例讲述了js实现一个链接打开两个链接地址的方法.分享给大家供大家参考.具体如下: <script type="text/javascript"> <!-- function adClick(ad, site) { window.open(ad); window.location = site; } --> </script> <a href="javascript:adClick('http://www.163.com/','h

Codeigniter校验ip地址的方法_php实例

本文实例讲述了Codeigniter校验ip地址的方法.分享给大家供大家参考.具体分析如下: 这里演示了Codeigniter如何获取用户ip地址,同时校验ip地址的有效性 获取用户ip: $this->input->ip_address(); //如果ip获取失败,则返回 0.0.0.0,我们也可以使用下面的代码校验ip的有效性 $ip = "192.168.1.1"; if (!$this->input->valid_ip($ip)) { echo &quo

求一个任意字符串里提取IP地址的正则

问题描述 字符串的内容是随机的,但里面肯定有个IP地址.求正则写法. 解决方案 解决方案二: 111.111.111.111楼主你告诉我这个应该解析IP是多少?解决方案三: (d{1,3}.){3}d{1,3}匹配X.X.X.XX代表1到3个任意数字包括999.999.999.999剩下的自己搞解决方案四: 理论上,IP四个段,每隔段是0-255之间的十进制整数,正则如下^(d|(d{2})|([0-2][0-5][0-5])).(d|(d{2})|([0-2][0-5][0-5])).(d|(

php采集时被封ip的解决方法_php技巧

在网上找了一些资料都没有找到,功夫不负有心人啊,在找的时侯有一个人提到了用搜索引擎爬虫蜘蛛的USERAGENT.虽然只提到一点点我还是想到了,列出我的解决方法, 1.使用Snoopy或curl传搜索引擎爬虫的USERAGENT值. 查看搜索引擎爬虫的USERAGENT值:http://www.jb51.net/yunying/29357.html 2.使用Snoopy或curl传referer值. 如:$snoopy->referer = 'http://www.google.com'; $he

php获取本机真实IP地址实例代码_php技巧

本文实例为大家分享了php获取本机真实IP地址实例代码,供大家参考. 主要是获取操作系统为win2000/xp.win7的本机IP真实地址,和获取操作系统为linux类型的本机IP真实地址,具体内容如下 function getLocalIP() { $preg = "/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/