php 通过CIDR 计算ip段开始ip 适用ipv6与ipv4

/*** CIDR 计算段开始ip* @param string $ipData 格式 ipv4"xxx.xxx.xxx.xxx/xx"或 ipv6:"xxxx:xxxx::xxxx/xx"* @return false|string*/
function cidrHandle($ipData)
{list($item['ip'], $item['mask']) = explode('/', $ipData);$mask = (int)$item['mask'];$ip = ipToBin($item['ip']);if (filter_var($item['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {//ip4if ($mask > 32) return false;$mask = 0xFFFFFFFF << (32 - $mask) & 0xFFFFFFFF;$mask = base_convert($mask, 10, 2);$ipbin = ($ip & $mask);} else {if ($mask > 128) return false;//一次做与运算数字长度128位,超过cpu位数,所以按32长度分成4段 ,$binArr = str_split($ip, 32);if ($mask <= 32) {$bitIndex = 0;$tagLen = 32;} elseif ($mask <= 64) {$bitIndex = 1;$tagLen = 64;} elseif ($mask <= 96) {$bitIndex = 2;$tagLen = 96;} else {$bitIndex = 3;$tagLen = 128;}$mask = 0xFFFFFFFF << ($tagLen - $mask) & 0xFFFFFFFF;$mask = base_convert($mask, 10, 2);//做与运算的段,后面段直接置零$binArr[$bitIndex] = ($binArr[$bitIndex] & $mask);for ($i = $bitIndex + 1; $i <= 3; $i++) {$binArr[$i] = str_repeat("0",32);}$ipbin = implode('', $binArr);}$ipStart = binToIp($ipbin);$outIpData = $ipStart . '/' . $item['mask'];return $outIpData;
}/***  IPv4|IPv6 转换 bin地址* @param string $ip ipv4|ipv6* @return false|string 字符串格式二进制数*/function ipToBin($ip)
{if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) {$bin = base_convert(ip2long($ip), 10, 2);$pad = 32 - strlen($bin);for ($i = 1; $i <= $pad; $i++) {$bin = "0" . $bin;}return $bin;}if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {return false;}if (($ip_n = inet_pton($ip)) === false) {return false;}// 16 x 8 bit = 128bit (ipv6)$bits = 15;$ipbin = "";while ($bits >= 0) {$bin = sprintf("%08b", (ord($ip_n[$bits])));$ipbin = $bin . $ipbin;$bits--;}return $ipbin;
}/*** 转换bin地址为IPv6 或IPv4* @param string $bin 字符串格式二进制数* @return false|string  IPv4|IPv6地址*/
function binToIp($bin)
{if (strlen($bin) <= 32) // 32bits (ipv4){return long2ip(base_convert($bin, 2, 10));}if (strlen($bin) != 128) {return false;}$bits = 0;$ipv6 = "";while ($bits <= 7) {$bin_part = substr($bin, ($bits * 16), 16);$ipv6 .= dechex(bindec($bin_part)) . ":";$bits++;}return inet_ntop(inet_pton(substr($ipv6, 0, -1)));
}

php 计算ip段开始ip相关推荐

  1. 192.168.和10.0.开头的IP、内网IP段、IP简介、分类——(IP观止)

    在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册.但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用. 这三个地址段分别位于A.B.C三类地 ...

  2. 192.168.和10.0.开头的IP、内网IP段、IP简介、分类

    IP地址分为五大类:A类.B类.C类.D类和E类,如下图所示: 在这五类IP地址中,我们最常使用的是A类.B类和C类地址. 在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请 ...

  3. linux ip段表示,IP地址网段表示法总结

    网络中常见到用172.16.82.0/25之类的表示一个地址的用法,刚开始还以为是表示172.16.82.0-172.16.82.25之类的地址范围,后来发现实在是解释不通,没有办法,只能到网上寻找答 ...

  4. java实现 IP/掩码位 转换 ip段范围

    import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.reg ...

  5. IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字

    IP地址.子网掩码.网络号.主机号.网络地址.主机地址以及ip段/数字 IP地址被用来给Internet上的电脑一个编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把 ...

  6. java 投票ip限制_java 限定网站在指定IP段访问

    标签: 贴代码 IpUtil.java package com.datongsoft.wg.common.util; import java.net.InetAddress; import java. ...

  7. 网络基础3(IP段格式,UDP数据报格式,TCP数据报格式)

    IP段格式 IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍. 对于IPv4,4位版本字段是4.4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节 ...

  8. 获得国内中国电信,网通,铁通的最新ip段的方法

    APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的!下面就让我们看看如何在Linux下获得一些电信运营商的IP地址分配情况: wget http:/ ...

  9. IP地址、IP段通俗化介绍

    链接:192.168.和10.0.开头的IP.内网IP段.IP简介.分类--(IP观止)_透明大脑-CSDN博客_内网ip段在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请 ...

最新文章

  1. Android TextView 常用技巧
  2. 报任安书文言现象_干货丨文言文句式详解,快点收藏!
  3. python代码加密cython_利用Cython对python代码进行加密
  4. 如何基于k8s快速搭建TeamCity(YAML分享)
  5. C++编译出现binding ‘const string {aka const std::__cxx11::basic_string<char>}’ to reference of type ‘std
  6. LeetCode 21. 合并两个有序链表(单链表)
  7. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
  8. double to string 损失精度的问题
  9. Notification小案例
  10. 基于matlab实现人脸识别解析
  11. Mybatis拦截器 拦截所有更新操作
  12. c语言随机数猜数游戏
  13. 最伟大的IT人物10强
  14. oracle的rollup操作---按照小组进行分组,同时求总计
  15. 苹果开发者账号添加设备
  16. 浙大计算机能保研到交大多吗6,保研之路:她来自双非高校,却同时保研到交大、浙大,有啥经验?...
  17. Javadoc(文档注释)详解
  18. 【Vue】Vue全家桶(三)Vue组件通信+Vue组件插槽+动画与过渡+使用vue-cli解决Ajax跨域问题
  19. Mybatis(尚硅谷)
  20. php 车牌号限号,车辆尾号限行API免费接口,车辆尾号限行API接口付费定制-进制数据...

热门文章

  1. TreeGrid(树形表格)
  2. 语音合成:transformer tts 论文复现以及dockerfile
  3. IEEE会议投稿资料汇总http://cadcg2015.nwpu.edu.cn/index.htm
  4. Navicat连接SqlServer 提示远程主机关闭一个现有连接
  5. 算法笔记 简单贪心(月饼问题)
  6. 保姆级教程:手把手教你搭建个人网站
  7. 十五、分布式相关理论
  8. CAGD(计算机辅助几何设计)大作业
  9. php调用shell执行scp,使用shell脚本自动执行scp文件传输
  10. 从0到1万字贴心讲解单体架构到分布式架构的演变(第一篇)