kigkonsult/iptools

IPv4/IPv6 工具

资助包维护!
其他

v1.6 2021-06-07 00:00 UTC

This package is auto-updated.

Last update: 2024-08-28 21:37:08 UTC


README

是PHP IP号码实用工具箱

“不要相信IP地址...”,但有时你必须处理它们。

提供IP v4/v6

  • 验证:IP在IP/网络(CIDR)范围内

和实用服务

  • 是有效的IP
  • 扩展/压缩IP号码
  • IP号码到二进制和反向
  • 子网掩码/CIDR等
安装

Composer

composer require kigkonsult/ipTools

版本1.6支持PHP 8.0,1.4 7.4,1.3 7.0。

或添加

require_once '[path/]ipTools/autoload.php';

到您的PHP脚本中

命名空间是Kigkonsult\IpTools。

赞助

使用paypal.me/kigkonsult捐款表示赞赏。如需发票,请发送电子邮件

用法

IpTools 2.0需要PHP7+

如何检查IPv4/v6号码是否有效且在有效范围内

1构建有效性范围过滤器

<?php

$validityRange = [
    '192.168.0.1',                // specific match 
    '192.168.0.10-192.168.0.20'   // within a range
    '192.168.1.*                  // with wildcard
    '192.168.2.0/25               // cidr
    '192.168.3.0/255.255.255.128' // or netmask
];

有关过滤器的详细信息,请查看下面的IpTool::isIpNumInRange

2a 'ad hoc' 检查

<?php
use Kigkonsult\IpTools\IpTool;

if( ! Iptool::factory( $validityRange )->checkIPnumInRange( $IpNumToTest )) {
    echo 'error message';
}

格式:Iptool::factory( [过滤器] )

  • 过滤器数组|string
  • 在无效过滤器上抛出InvalidArgumentException。

2b 类实例检查(添加了过滤器)

<?php
use Kigkonsult\IpTools\IpTool;

$ipValidator = new Iptool( $baseFilterArr );
...
$adHocFilter = '192.168.4.*';
...
if( ! $ipValidator->addFilter( $adHocFilter )
    ->checkIPnumInRange( $IpNumToTest )) {
    echo 'error message';
}

格式 Iptool::__construct( [过滤器] )

  • 过滤器数组|string
  • 在无效过滤器上抛出InvalidArgumentException。

格式 IpTool::AddFilter(过滤器)

  • 过滤器数组|string
  • 在无效过滤器上抛出InvalidArgumentException。

格式 IpTool::deleteFilter()

  • 移除过滤器

格式 IpTool::getFilter()

  • 返回(数组)过滤器
(静态)方法

在这里你可以找到IP号码实用方法

  • IpTool::isValidIP( IpNum )

    • 在有效的IPv4/v6号码上返回bool true
  • IpTool::expand( IpNum )

    • 返回扩展的
      • IPv4号码到4个八位字节
      • 完整的IPv6号码
  • IpTool::isIpNumInRange( IpNum, 数组接受范围[, & matchIx ] )

    • 如果(有效)IPv4/v6号码与数组中(的任何元素)IPv4/v6网络过滤器范围匹配,则返回bool true
    • 找到时,matchIx包含过滤器范围数组索引
    • 有关过滤器的详细信息,请查看下面的IpTool::isIpv4InRangeIpTool::isIpv6InRange
  • IpTool::cidr2NetmaskBin( cidr, bitNum )

    • 将IPv4/v6 CIDR块作为二进制返回
    • bitNum: 32(IPv4)/ 128(IPv6)

IPv4实用方法

  • IpTool::isValidIPv4( IpNum )

    • 在有效的IPv4号码上返回bool true
  • IpTool::hasIPv4port( ipNum )

    • 如果IPv4号码有尾随端口,则返回bool true
  • IpTool::getPv4port( ipNum )

    • 返回IPv4端口
  • IpTool::getPv4withoutPort( ipNum )

    • 返回不带端口的IPv4
  • IpTool::IPv42bin( ipNum )

    • 将IPv4号码作为二进制返回
  • IpTool::bin2IPv4( IPbin )

    • 将二进制作为IPv4号码返回
  • IpTool::decbin32( dec )

    • 返回二进制字符串(左对齐)填充到32位数字
  • IpTool::hasIPv4ValidHost( IpNum )

    • 如果主机名存在于有效的IPv4号码并可以解析,则返回true
  • IpTool::expandIPv4( $ipNum )

    • 返回扩展的IPv4号码到4个八位字节
  • IpTool::isValidIPv4Cidr( cidr )

    • 在有效的IPv4 CIDR上返回bool true
  • IpTool::ipv4CIDR2Netmask( cidr )

    • 将IPv4 CIDR作为子网掩码返回
  • IpTool::ipv4Netmask2Cidr( netmask )

    • 将IPv4子网掩码作为CIDR返回
  • IpTool::getNetworkFromIpv4Cidr( ipNum, cidr )

    • 从IPv4号码和CIDR返回IPv4网络
  • IpTool::IPv4Breakout( ipAddress, ipNetmaskCidr[, outputAsIpNum = false] )

    • 返回数组(网络,第一个IP,最后一个IP,广播IP)
    • ipNetmaskCidr = 子网掩码或CIDR
    • outputAsIpNum = false返回二进制
    • outputAsIpNum = true返回IPv4号码
  • IpTool::isIPv4InRange( ipNum, array acceptRanges [, & matchIx] )

    • 如果(有效)IPv4与数组中的IPv4/网络范围中的任何元素匹配,则返回true
    • 找到时,matchIx包含过滤器范围数组索引

    IPv4网络过滤器范围可以指定为

IPv6实用方法

  • IpTool::isValidIPv6( ipNum )

    • 如果IPv6号码有效,则返回true
  • IpTool::hasIPv6port( ipNum )

    • 如果IPv6号码有尾随端口,则返回bool true
  • IpTool::getPv6port( ipNum )

    • 返回IPv6端口
  • IpTool::getPv6withoutPort( ipNum )

    • 返回没有端口的IPv6
  • IpTool::isIPv4MappedIPv6( ipNum )

    • 如果IP是v4映射的IPv6,则返回bool true
  • IpTool::IPv62bin( ipNum )

    • 以二进制形式返回IPv6号码
  • IpTool::bin2IPv6( IPbin )

    • 将二进制字符串作为IPv6号码返回
  • IpTool::getIPv6InterfaceIdentifier( ipNum )

    • 返回(单播/任播)IPv6号码接口标识符(最后64位为十六进制)
  • IpTool::getIPv6NetworkPrefix( ipNum )

    • 返回(单播/任播)IPv6号码网络前缀(前64位为十六进制)
  • IpTool::expandIPv6( ipNum )

    • 返回展开(压缩)的完整IPv6号码
  • IpTool::compressIPv6( ipNum )

    • 返回压缩的IPv6号码或IPv6位块组
  • IpTool::isValidIPv6Cidr( cidr )

    • 如果IPv6 cidr有效,则返回bool true
  • IpTool::isIPv6InRange( ipNum, array acceptRanges [, & matchIx] )

    • 如果(有效)IP号码与数组中的IP/网络范围中的任何元素匹配,则返回bool true
    • 找到时,matchIx包含过滤器范围数组索引

    IPv6网络过滤器范围可以指定为

    注意,搜索匹配是按数组顺序进行的!!

许可协议

本项目采用LGPLv3许可协议授权