PHPackages                             luka/network-address-types - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. luka/network-address-types

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

luka/network-address-types
==========================

Provides typed value objects for network addresses (IP v4/v6 and MAC)

1.2.0(12mo ago)102191[1 issues](https://github.com/lukanetconsult/network-address-types/issues)1LGPL-3.0PHPPHP 8.2 - 8.4CI failing

Since Jan 9Pushed 12mo ago6 watchersCompare

[ Source](https://github.com/lukanetconsult/network-address-types)[ Packagist](https://packagist.org/packages/luka/network-address-types)[ RSS](/packages/luka-network-address-types/feed)WikiDiscussions master Synced 5d ago

READMEChangelog (4)Dependencies (3)Versions (6)Used By (1)

Network Address Types for PHP
=============================

[](#network-address-types-for-php)

[![Test Coverage](https://camo.githubusercontent.com/1d58724c8751fada16fcfe3847f4a0008c69c59b7acb7b1a2850c304ba7ba869/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f30643463666533366366353761353032626238642f746573745f636f766572616765)](https://codeclimate.com/github/lukanetconsult/network-address-types/test_coverage)[![Maintainability](https://camo.githubusercontent.com/902e43afec08ab721eee961685aaa1ad703943e96a5e8d5f32dcdb860d7eeb89/68747470733a2f2f6170692e636f6465636c696d6174652e636f6d2f76312f6261646765732f30643463666533366366353761353032626238642f6d61696e7461696e6162696c697479)](https://codeclimate.com/github/lukanetconsult/network-address-types/maintainability)[![Infection MSI](https://camo.githubusercontent.com/aa5b2874b3e4689bb1895fee5ef4631e285c6dd36af88a9fe5bff98d73a55837/68747470733a2f2f62616467652e737472796b65722d6d757461746f722e696f2f6769746875622e636f6d2f6c756b616e6574636f6e73756c742f6e6574776f726b2d616464726573732d74797065732f6d6173746572)](https://infection.github.io)

This library provides types to handle the most common network addresses. The following address types are supported:

- MAC addresses in the following forms:
    - Colon separated (`00:00:00:00:00:00`)
    - Dash separated (`00-00-00-00-00-00`)
    - Without separator (`000000000000`)
- IPv4 (ex: `127.0.0.1`)
- IPv6 (ex: `::1`)
- CIDR addresses for IPv4 and IPv6 (ex: `129.0.0.1/12`, `ff80:e::/64`)

Installation
------------

[](#installation)

Installation can be performed with composer:

```
composer require luka/network-address-types
```

### Requirements

[](#requirements)

- PHP
    - 7.4 (until version 1.1.0)
    - 8.0
    - 8.1
    - 8.2
- `ext-gmp` for handling IPv6 calculations
- `ext-json` as it supports json\_encode by implementing `JSONSerializable`

Getting started
===============

[](#getting-started)

```
use LUKA\Network\NetworkAddress;

$address = NetworkAddress::fromString('127.0.0.1');
assert($address instanceof \LUKA\Network\IPv4\IPv4Address);
$address = NetworkAddress::fromString('127.0.0.1/8');
assert($address instanceof \LUKA\Network\IPv4\CIDRv4Address);
$address = NetworkAddress::fromString('::1');
assert($address instanceof \LUKA\Network\IPv6\IPv6Address);
$address = NetworkAddress::fromString('ff80::1/64');
assert($address instanceof \LUKA\Network\IPv6\CIDRv6Address);
$address = NetworkAddress::fromString('84:34:ff:ff:ff:ff');
assert($address instanceof \LUKA\Network\MACAddress);
```

Serialization
=============

[](#serialization)

All types can be constructed from strings and can therefore be converted to strings as well with the `toString()` method.

```
use LUKA\Network\NetworkAddress;

assert('::1' === NetworkAddress::fromString('::1')->toString());
```

When converting addresses to strings, they will be normalized for the corresponding type:

```
use LUKA\Network\NetworkAddress;

assert('::1' === NetworkAddress::fromString('0:0:0:0::1')->toString());
assert('00:00:00:00:00:00' === NetworkAddress::fromString('00-00-00-00-00-00')->toString());
```

JSON
----

[](#json)

All address types implement the `JSONSerializable` interface, and can therefore be used with `json_encode()` directly.

Binary
------

[](#binary)

IP and MAC addresses can also be converted to the corresponding byte sequence. (for example to storing them in a `BINARY` database field).

They can also be constructed from this byte sequence with the static `fromByteString()` method of the corresponding class.

Address Comparison
==================

[](#address-comparison)

Compare equality
----------------

[](#compare-equality)

Each address implements an `equals()` method to compare it to other network addresses.

Addresses are considered equal when they are from the same type and contain the same value:

```
use LUKA\Network\NetworkAddress;

assert(
    true === NetworkAddress::fromString('::1')
        ->equals(NetworkAddress::fromString('::1'))
);

// Value mismatch:
assert(
    false === NetworkAddress::fromString('::1')
        ->equals(NetworkAddress::fromString('::2'))
);

// Type mismatch (different IP version):
assert(
    false === NetworkAddress::fromString('::1')
        ->equals(NetworkAddress::fromString('127.0.0.1'))
);

// Type mismatch (cidr vs non-cidr)
assert(
    false === NetworkAddress::fromString('192.168.0.5')
        ->equals(NetworkAddress::fromString('192.168.0.5/24'))
);
```

Comparing addresses to networks
-------------------------------

[](#comparing-addresses-to-networks)

CIDR addresses allow to obtain the corresponding network to the denoted address. With this network you can check if an IP address is within this network.

```
use LUKA\Network\NetworkAddress;

$cidr = NetworkAddress::fromString('192.168.0.7/8');
$network = $cidr->toNetwork();

assert(true === $network->containsAddress(NetworkAddress::fromString('192.168.0.1')));
assert(true === $network->containsAddress(NetworkAddress::fromString('192.45.0.2')));
assert(false === $network->containsAddress(NetworkAddress::fromString('127.10.0.1')));
assert(false === $network->containsAddress(NetworkAddress::fromString('ff80::5')));
```

This will work for IPv6 as well:

```
use LUKA\Network\NetworkAddress;

$cidr = NetworkAddress::fromString('ff80::/64');
$network = $cidr->toNetwork();

assert(true === $network->containsAddress(NetworkAddress::fromString('ff80::1')));
assert(true === $network->containsAddress(NetworkAddress::fromString('ff80::10:e5:7')));
assert(false === $network->containsAddress(NetworkAddress::fromString('ff80:e::1')));
assert(false === $network->containsAddress(NetworkAddress::fromString('127.0.0.1')));
```

###  Health Score

44

—

FairBetter than 92% of packages

Maintenance49

Moderate activity, may be stable

Popularity19

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity78

Established project with proven stability

 Bus Factor1

Top contributor holds 94.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~653 days

Total

4

Last Release

360d ago

PHP version history (4 changes)1.0.0PHP ^7.4

1.1.0PHP ~8.0.0

1.1.1PHP ~8.2.0 | ~8.1.0 | ~8.0.0

1.2.0PHP 8.2 - 8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/4e1761c6aa1122e2178e1eb8a3348366dd73553f8a857fd0b0fd8228f0263e5b?d=identicon)[tux-rampage](/maintainers/tux-rampage)

---

Top Contributors

[![tux-rampage](https://avatars.githubusercontent.com/u/558326?v=4)](https://github.com/tux-rampage "tux-rampage (52 commits)")[![Lctrs](https://avatars.githubusercontent.com/u/5477973?v=4)](https://github.com/Lctrs "Lctrs (2 commits)")[![simPod](https://avatars.githubusercontent.com/u/327717?v=4)](https://github.com/simPod "simPod (1 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm

Type Coverage Yes

### Embed Badge

![Health badge](/badges/luka-network-address-types/health.svg)

```
[![Health](https://phpackages.com/badges/luka-network-address-types/health.svg)](https://phpackages.com/packages/luka-network-address-types)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
