kigkonsult / iptools
IPv4/IPv6 工具
Requires
- php: >=8.0
Requires (Dev)
- phpstan/phpstan: >=0.9.3
- phpunit/phpunit: >=6.5.14
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 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::isIpv4InRange和IpTool::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许可协议授权