bis-gmbh/ip-addr

管理 IPv4 和 IPv6 地址和子网

v0.6.3 2017-11-21 08:50 UTC

This package is not auto-updated.

Last update: 2024-09-15 05:08:02 UTC


README

安装

使用 composer 安装

composer require bis-gmbh/ip-addr

安装要求

  • PHP 版本 5.4 或以上
  • PHP GMP 扩展用于 IPv6 随机算术

抽象使用示例

use \BIS\IPAddr\Utils as IP;
use \BIS\IPAddr\HostIterator;
use \BIS\IPAddr\SubnetIterator;

$providerSubnet = IP::make('10.0/8');

$userSubnet = IP::make('10.100.0.2/30');

if ($providerSubnet->contains($userSubnet)) {
    printf("User network: %s\n", $userSubnet->network()->addr());
    printf("User broadcast: %s\n", $userSubnet->broadcast()->addr());
    printf("User addrs:\n");
    foreach ($userSubnet as $index => $ip) {
        printf("%d: %s\n", $index, $ip->addr());
    }
    $userHosts = new HostIterator($userSubnet);
    printf("User hosts:\n");
    foreach ($userHosts as $index => $ip) {
        printf("%d: %s\n", $index, $ip->addr());
    }
}

printf("Provider subnets:\n");
$providerSubnets = new SubnetIterator($providerSubnet, 10);
foreach ($providerSubnets as $index => $subnet) {
    printf("%d: %s\n", $index, $subnet->cidr());
}

将输出

User network: 10.100.0.0
User broadcast: 10.100.0.3
User addrs:
0: 10.100.0.0
1: 10.100.0.1
2: 10.100.0.2
3: 10.100.0.3
User hosts:
0: 10.100.0.1
1: 10.100.0.2
Provider subnets:
0: 10.0.0.0/10
1: 10.64.0.0/10
2: 10.128.0.0/10
3: 10.192.0.0/10

被使用于

API

构造函数

🔹 v4::create | v6::create

描述
public static function create ( $anyFormat [, string $maskString = null ] ) : Address;
参数
  • anyFormat
    • 整数,例如 1230xABCDEF000752270b0101010
    • 数字字符串,例如 '123''0xABCDEF00''075227''0b0101010'
    • 文本格式
      • v4, '192.168.10.1''172.16.3''10.0'
      • v6, 'a:b:c:d::''::''::345d:10.40.60.1'
    • CIDR 格式
      • v4, '10.0.0.0/8''192.168/16'
      • v6, '2000:b:c:d::/64''::1/128'
    • 范围格式 '<first_addr> - <second_addr>',其中 <first_addr><second_addr> - 以相同 ip 版本的文本格式表示的地址
      • v4 '10.0.0.0 - 10.0.0.255'
      • v6 '2000:b:c:d::5d - 2000:b:c:d::ff'
  • maskString 网络掩码的文本格式,如果 anyFormat 参数也在文本格式中,则允许
    • v4 '255.255.255.0''255.0'
    • v6 'ffff:ffff:ffff:ffff::'
返回值

成功时返回一个 Address 对象

示例
$v4instance = v4::create('127.0.0.1');
$v4subnet = v4::create('192.168.0.1', '255.255.255.0');
$v6instance = v6::create('::1');

🔹 new v4 | new v6

描述

通过使用与 create 方法相同的参数,通过 new 操作符创建一个 Address 实例。

示例
$v4instance = new v4('127.0.0.1');
$v6instance = new v6('::1');

方法

🔹 v4::isNumeric | v6::isNumeric
描述
public static function isNumeric ( $value ) : bool;

检查参数 value 是否以数字格式存在。

参数
  • value - 已验证的值
返回值

如果 value 以数字格式,则返回 TRUE,否则返回 FALSE

示例
var_dump(v4::isNumeric(0xFF000000));
var_dump(v4::isNumeric('0xFF000000'));
var_dump(v4::isNumeric('abcdef'));
var_dump(v4::isNumeric(true));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isTextual | v6::isTextual
描述
public static function isTextual ( $value ) : bool;

检查参数 value 是否以文本格式存在。

参数
  • value - 已验证的值
返回值

如果 value 以文本格式,则返回 TRUE,否则返回 FALSE

var_dump(v6::isTextual('1111:2222::5555:6666:7777:8888'));
var_dump(v6::isTextual('::ffff:2.3.4.0'));
var_dump(v6::isTextual('::/'));
var_dump(v6::isTextual('::ffff:2.3.4'));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isCIDR | v6::isCIDR
描述
public static function isCIDR ( $value ) : bool;

检查参数 value 是否以 CIDR 格式存在。

参数
  • value - 已验证的值
返回值

如果 value 以 CIDR 格式,则返回 TRUE,否则返回 FALSE

var_dump(v6::isCIDR('2000:2222::5555:6666:7777:8888/64'));
var_dump(v6::isCIDR('::/128'));
var_dump(v6::isCIDR('::'));
var_dump(v6::isCIDR('::/129'));
bool(true)
bool(true)
bool(false)
bool(false)
🔹 v4::isRange | v6::isRange
描述
public static function isRange ( $value ) : bool;

检查参数 value 是否以范围格式存在。允许地址的任何顺序 - 直接或反向,例如 '10.0.0.255 - 10.0.0.0' 是允许的范围。

参数
  • value - 已验证的值
返回值

如果 value 以范围格式,则返回 TRUE,否则返回 FALSE

示例
var_dump(v4::isRange('10.0 - 10.10'));
var_dump(v4::isRange('192.168.0.1-   192.168.255.255'));
var_dump(v4::isRange('127.0.0.0-'));
var_dump(v4::isRange('127.0.0.0-::1'));
bool(true)
bool(true)
bool(false)
bool(false)

实例

属性

🔸 v4::$privateNetworks
描述

rfc1918 中所述的私有 v4 网络数组。

🔸 v4::$multicastNetworks
描述

rfc3171 中所述的组播 v4 网络数组。

🔸 v4::$reservedNetworks
描述

RFC 1112,第 4 节 中所述的保留 v4 网络数组。

🔸 v4::$networkTypes
描述

表示具有其描述的特殊用途 v4 地址的关联数组的数组,如 rfc5735 中所述。

🔸 v6::$addressTypes
描述

表示 v6 地址类型及其描述的关联数组的数组,如 rfc4291 中所述。

方法

🔹 v4::version | v6::version
描述
public function version ( void ) : int;
返回值

返回当前对象地址的版本号。

示例
var_dump(v4::create('10.0.0.0')->version());
var_dump(v6::create('::1')->version());
int(4)
int(6)
🔹 v4::assign | v6::assign
描述
public static function assign ( $anyFormat [, string $maskString = null ] ) : Address;

为当前对象分配新的地址和掩码值。

参数

请参阅 create 方法。

示例
$ip = v4::create('127.0.0.1');
var_dump($ip->addr());
$ip->assign('192.168.0.1');
var_dump($ip->addr());
string(9) "127.0.0.1"
string(11) "192.168.0.1"
🔹 v4::binary | v6::binary

待办事项

🔹 v4::decimal | v6::decimal

待办事项

🔹 v4::hexadecimal | v6::hexadecimal

待办事项

🔹 v4::netmask | v6::netmask

待办事项

🔹 v4::prefixLength | v6::prefixLength

待办事项

🔹 v4::first | v6::first

待办事项

🔹 v4::last | v6::last

待办事项

🔹 v4::numAddrs | v6::numAddrs

待办事项

🔹 v4::numHosts | v6::numHosts

待办事项

🔹 v4::hostBits | v6::hostBits

待办事项

🔹 v4::within | v6::within

待办事项

🔹 v4::contains | v6::contains

待办事项

🔹 v4::addr | v6::addr

待办事项

🔹 v4::mask | v6::mask

待办事项

🔹 v4::cidr | v6::cidr

待办事项

🔹 v4::range | v6::range

待办事项

🔹 v4::reverse | v6::reverse

待办事项

🔹 v4::reverseMask | v6::reverseMask

待办事项

🔹 v4::netType | v6::netType

待办事项

🔹 v4::network

待办事项

🔹 v4::broadcast

待办事项

🔹 v4::netClass

待办事项

🔹 v6::full

待办事项

🔹 v6::full4

待办事项

🔹 v6::fullMask

待办事项

🔹 v6::compressed

待办事项

🔹 v6::compressed4

待办事项

数组访问

待办事项

迭代器

地址迭代

待办事项

主机迭代

待办事项

子网迭代

待办事项

异常

静态方法和对象方法可以抛出以下类型的异常

  • 在调用带错误参数的方法时抛出\InvalidArgumentException;
  • 尝试使用不适用于地址对象的语言构造,例如通过索引键访问数组时覆盖元素时抛出\DomainException;
  • 当库类无法在当前环境中工作时抛出\RuntimeException,例如PHP GMP扩展未安装。
try {
    $ip = v6::create('invalid addr');
} catch (\InvalidArgumentException $e) {
    echo $e->getMessage() . PHP_EOL;
}

try {
    $ip = v6::create('2002::fdce/64');
    echo $ip[12]->addr() . PHP_EOL;
    $ip[12] = 0;
} catch (\DomainException $e) {
    echo $e->getMessage() . PHP_EOL;
}
Wrong arguments
2002::c
Read-only access

Utils 类

方法

🔹 make
描述
public static function make ( $anyFormat [, string $maskString = null ] ) : Address

尝试根据提供的参数创建任何版本的对象

参数

请参阅 create 方法。

返回值

成功时返回一个 Address 对象

示例
use \BIS\IPAddr\Utils as IP;

var_dump(IP::make('127.0.0.1')->version());
var_dump(IP::make('::1')->version());
int(4)
int(6)
🔹 info
描述
public static function info ( Address $addr ) : array
参数

addr - v4v6 对象

返回值

返回包含给定地址摘要信息的数组。

示例
use \BIS\IPAddr\Utils as IP;

$ip = IP::make('127.0.0.1/8');
echo json_encode(IP::info($ip), JSON_PRETTY_PRINT) . PHP_EOL;
{
    "ver": 4,
    "host": {
        "addr": "127.0.0.1",
        "bin": "0b01111111000000000000000000000001",
        "dec": 2130706433,
        "hex": "0x7f000001",
        "raddr": "1.0.0.127.in-addr.arpa.",
        "type": "Loopback"
    },
    "net": {
        "cidr": "127.0.0.1\/8",
        "range": "127.0.0.0 - 127.255.255.255",
        "masklen": 8,
        "hostbits": 24,
        "mask": "255.0.0.0",
        "rmask": "0.0.0.255",
        "addrs": 16777216,
        "hosts": 16777214,
        "network": "127.0.0.0",
        "broadcast": "127.255.255.255",
        "class": "A"
    }
}