littledevnl/iptools

用于处理IP和网络的小型包

v1.2 2021-04-12 13:36 UTC

This package is auto-updated.

Last update: 2024-09-12 20:36:25 UTC


README

Latest Version on Packagist CI Mutation testing badge

此包是一套用于处理IP地址和网络的工具。

很多内部结构都受到了S1lentium/IPTools的启发,但当我使用那个包时,我发现自己开始将所有需要的功能封装在单独的类中。这促使我创建了自己的包。

目前状态相当原始,但请随意使用。我会尽最大努力不更改接口和外观。

安装

composer require littledevnl/iptools

入门

use Littledev\IPTools\Address;
use Littledev\IPTools\Network;
use Littledev\IPTools\Iterator\AddressIterator;
use Littledev\IPTools\Family\IPFamily;

$ip = Address::parse($_SERVER['REMOTE_ADDR']);
if ($ip->family() === IPFamily::v6()) {
    echo 'Good for you!';
}

$network6 = Network::parse('2001:db8::/64');
if ($network6->contains($ip)) {
    echo 'You use an IP which is reserved for documentation.';
}

$localNetwork = Network::parse('127.0.0.1/24');
if ($localNetwork->contains($ip)) {
    echo 'No place like localhost.';
}

$iterator = new AddressIterator($localNetwork);
foreach ($iterator as $address) {
    echo 'In local network: ' . $address->address();
}

目标

  • 无依赖。
  • 一组用于解析和操作IP地址和网络的工具
  • 实用类应通过公共父类进行扩展

变更日志

  • [v0.1] IP地址和网络的解析。
  • [v0.2] constains 现在可以接受网络和地址。通用化
  • [v0.3] 网络迭代器
  • [v0.4] 网络列表
  • [v1.0] 重构接口
  • [v1.1] 修复了composer PHP要求,支持PHP7.4及以上版本
  • [v1.2] 修复了较短的inAddr输入

限制

尚未形成一个完整的工具集,这只是开始。

由于没有外部依赖(如任意精度数字),因此无法执行某些操作。例如,计算IPv6网络中的主机数。您可以使用bcmath自己实现,请参考下面的示例。

use Littledev\IPTools\Network;
use Littledev\IPTools\Family\IPFamily;

$net = Network::parse('2001:db8::/64');
$numbersOfAddresses =  bcpow('2', (string)(IPFamily::v6()->maxPrefix() - $net->subnet()->prefix()));