cidram/aggregator

从CIDRAM的IPv4+IPv6 IP+CIDR聚合器中独立实现的类。

v1.3.4 2023-08-03 16:44 UTC

This package is auto-updated.

Last update: 2024-09-02 05:48:16 UTC


README

PHP >= 5.4.0 License: GPL v2 PRs Welcome

聚合器。

从CIDRAM的IPv4+IPv6 IP+CIDR聚合器中独立实现的类。

如何安装

安装聚合器非常简单。您可以直接从 src 目录下载必要的文件,然后将它们复制到需要它的任何项目中,或者,如果您愿意,您也可以使用Composer安装它

composer require cidram/aggregator

注意:这个类中的代码基于CIDRAM包中的代码,但这两个并不是相互依赖的。

下载文件后,为了让您的项目使用这个类,建议使用PSR-4自动加载(尤其是如果您使用大量不同的、不相关的类)。如果您通过Composer安装这个类,只需执行 require_once 'vendor/autoload.php'; 即可。如果您手动安装(或没有使用Composer),并且不想使用PSR-4自动加载器,您可以通过包含指向相关PHP文件中类文件的相应语句,简单地要求或包含类到您的项目中(在许多情况下这可能会更容易)。

如何使用

使用聚合器的最简单方法是创建一个新实例的类,并将要聚合的数据作为参数传递给聚合方法。聚合方法将返回已输入数据的聚合。

示例

<?php
use \CIDRAM\Aggregator\Aggregator;

$Aggregator = new Aggregator();
$Output = $Aggregator->aggregate($Input);

如果加载了文件 helpers.php,这个函数将可用

$Output = aggregate($Input);

注意:如果通过 composer 安装了包,则 aggregate 函数将可用,否则,您需要包含文件 src/helpers.php

在上面的示例中,如果这被输入为 $Input

127.0.0.1 Some arbitrary single IPs from here
127.0.0.2
127.0.0.3
1::
1::1
1:2:3:4::
1:2:3:4::1
1:2:3:4::2
1:2:3:4::3
2002::1
127.0.0.4
127.0.0.5
257.0.0.999 Some arbitrary INVALID single IPs from here
555.666.777.888
2002:abcd:efgh::1
10.0.0.0/9 Some arbitrary CIDRs from here
10.128.0.0/9
10.192.0.0/10
11.128.0.0/10
11.192.0.0/10
12.0.0.0/9
12.128.0.0/9
13.0.0.0/9
13.128.0.0/9
192.168.0.0/8 Some arbitrary INVALID CIDRs from here
192.168.0.0/9
192.168.0.0/10
192.168.192.0/10
192.169.0.0/10
192.169.64.0/10
1.2.3.4/255.255.255.254 Some arbitrary netmasks from here
2.3.4.5/255.255.255.255
99.99.99.99/255.255.255.255
99.10.10.0/255.255.255.0
99.10.11.0/255.255.255.0
99.8.0.0/255.252.0.0
11.11.11.11/11.11.11.11 Some arbitrary INVALID netmasks from here
255.255.255.254/1.2.3.4
6.7.8.9/255.255.255.254
88.88.88.88/255.255.254.255
Foobar Some garbage data from here
ASDFQWER!@#$
>>HelloWorld<<
SDFSDFSDF
QWEQWEQWE

$Output 应包含此内容

1.2.3.4/31
2.3.4.5/32
10.0.0.0/8
11.128.0.0/9
12.0.0.0/7
99.8.0.0/14
99.99.99.99/32
127.0.0.1/32
127.0.0.2/31
127.0.0.4/31
1::/127
1:2:3:4::/126
2002::1/128

数据是换行符分隔的,每一行代表一个要聚合的项目。聚合器无缝处理IPv4+IPv6,尝试清理每个项目(即,删除无效和冗余数据,以减少到有效的IP、CIDR或子网掩码),尝试聚合清理后的数据(不可读和无效的数据将被拒绝),然后返回聚合后的数据。

如果需要,可以获取有关每次聚合操作的更多信息。如果“结果”设置为 true(默认为 false),则在操作期间将相应地填充“输入数量”(操作开始时输入的总行数)、“拒绝数量”(被视为无效或不可读的行或项目数量;注意,此数字也将包括由于在聚合之前删除无效和冗余数据而去除的重复项)、“接受数量”(接受聚合的行或项目数量;即 NumberAccepted = NumberEntered - NumberRejected)、“合并数量”(聚合或合并的项目总数)和“返回数量”(操作结束时返回的项目总数)。这些值可以在每次操作后从类实例或对象中检索。

<?php
use \CIDRAM\Aggregator\Aggregator;

$Aggregator = new Aggregator();
$Aggregator->Results = true;
$Output = $Aggregator->aggregate($Input);
echo $Output;
echo "\n\n";
echo $Aggregator->NumberEntered . "\n";
echo $Aggregator->NumberRejected . "\n";
echo $Aggregator->NumberAccepted . "\n";
echo $Aggregator->NumberMerged . "\n";
echo $Aggregator->NumberReturned . "\n";

通常情况下,为每个聚合操作创建一个新的类实例会更好。但是,如果您想要回收旧实例,并在每次操作后继续检索这些值,您可以通过使用“resetNumbers”方法在操作之间将这些值重置为其初始状态。

$Aggregator->resetNumbers();

无论“Results”是true还是false,在每个聚合操作之后,“ProcessingTime”都将可用,以便您知道操作中消耗了多少时间。这既可以用于调试,也可以用于一般的虚荣目的。

示例

<?php
use \CIDRAM\Aggregator\Aggregator;

$Aggregator = new Aggregator();
$Output = $Aggregator->aggregate($Input);
echo $Aggregator->ProcessingTime . "\n";

此外,该类还提供了“ExpandIPv4”和“ExpandIPv6”公共方法,它们与CIDRAM包的闭包对应项功能完全相同。分别调用这些方法并传入IPv4或IPv6 IP地址,将返回一个包含给定IP地址潜在因子的数组。潜在因子是给定IP地址所属的所有可能的子网(或CIDR)。当提供有效的IP地址时,“ExpandIPv4”和“ExpandIPv6”应该分别返回包含32和128个元素的数组。

如果您希望Aggregator以子网掩码而不是CIDR的形式返回结果,您可以将对象实例化为具有参数值1的对象,如下所示

<?php
use \CIDRAM\Aggregator\Aggregator;

$Aggregator = new Aggregator(1);
$Output = $Aggregator->aggregate($Input);

对于前面提到的示例输入,输出应类似于以下内容

1.2.3.4/255.255.255.254
2.3.4.5/255.255.255.255
10.0.0.0/255.0.0.0
11.128.0.0/255.128.0.0
12.0.0.0/254.0.0.0
99.8.0.0/255.252.0.0
99.99.99.99/255.255.255.255
127.0.0.1/255.255.255.255
127.0.0.2/255.255.255.254
127.0.0.4/255.255.255.254
1::/ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe:0
1:2:3:4::/ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc:0
2002::1/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:0

其他信息

许可

许可协议为GNU通用公共许可证版本2.0(GPLv2)

支持

请使用此存储库的问题页面。

最后更新:2024年8月2日(2024.08.02)。