2017 © Pedro Peláez
 

library iptools

PHP Library for manipulating network addresses (IPv4 and IPv6)

image

s1lentium/iptools

PHP Library for manipulating network addresses (IPv4 and IPv6)

  • Wednesday, February 7, 2018
  • by S1lentium
  • Repository
  • 10 Watchers
  • 91 Stars
  • 144,968 Installations
  • PHP
  • 8 Dependents
  • 0 Suggesters
  • 18 Forks
  • 5 Open issues
  • 5 Versions
  • 15 % Grown

The README.md

IPTools

PHP Library for manipulating network addresses (IPv4 and IPv6)., (*1)

Build Status Coverage Status Code Climate, (*2)

PHP 5.6 PHP 7.0 PHP 8.0, (*3)

Installation

Composer: Run in command line:, (*4)

composer require s1lentium/iptools

or put in composer.json:, (*5)

{
    "require": {
        "s1lentium/iptools": "*"
    }
}

Usage

IP Operations

$ip = new IP('192.168.1.1');
echo $ip->version;// IPv4
$ip = new IP('fc00::');
echo $ip->version; // IPv6

Parsing IP from integer, binary and hex:, (*6)

echo (string)IP::parse(2130706433); // 127.0.0.1
echo (string)IP::parse('0b11000000101010000000000100000001') // 192.168.1.1
echo (string)IP::parse('0x0a000001'); // 10.0.0.1

or:, (*7)

echo (string)IP::parseLong(2130706433); // 127.0.0.1
echo (string)IP::parseBin('11000000101010000000000100000001'); // 192.168.1.1
echo (string)IP::parseHex('0a000001'); // 10.0.0.1

Converting IP to other formats:, (*8)

echo IP::parse('192.168.1.1')->bin // 11000000101010000000000100000001
echo IP::parse('10.0.0.1')->hex // 0a000001
echo IP::parse('127.0.0.1')->long // 2130706433

Other public properties:

maxPrefixLength The max number of bits in the address representation: 32 for IPv4, 128 for IPv6., (*9)

octetsCount The count of octets in IP address: 4 for IPv4, 16 for IPv6, (*10)

reversePointer The name of the reverse DNS PTR for the address:, (*11)

echo new IP::parse('192.0.2.5')->reversePointer // 5.2.0.192.in-addr.arpa
echo new IP::parse('2001:db8::567:89ab')->reversePointer // b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa

Network Operations

echo Network::parse('192.0.0.1 255.0.0.0')->CIDR; // 192.0.0.0/8
echo (string)Network::parse('192.0.0.1/8')->netmask; // 255.0.0.0
echo (string)Network::parse('192.0.0.1'); // 192.0.0.1/32

Exclude IP from Network:, (*12)

$excluded = Network::parse('192.0.0.0/8')->exclude(new IP('192.168.1.1'));
foreach($excluded as $network) {
    echo (string)$network . '<br>';
}
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13
192.168.0.0/24
192.168.1.0/32
192.168.1.2/31
...
192.192.0.0/10

Exclude Subnet from Network:, (*13)

$excluded = Network::parse('192.0.0.0/8')->exclude(new Network('192.168.1.0/24'));
foreach($excluded as $network) {
    echo (string)$network . '<br>';
}
192.0.0.0/9
192.128.0.0/11
192.160.0.0/13
192.168.0.0/24
192.168.2.0/23
...
192.192.0.0/10

Split network into equal subnets, (*14)

$networks = Network::parse('192.168.0.0/22')->moveTo('24');
foreach ($networks as $network) {
    echo (string)$network . '<br>';
}
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24

Iterate over Network IP adresses:, (*15)

$network = Network::parse('192.168.1.0/24');
foreach($network as $ip) {
    echo (string)$ip . '<br>';
}
192.168.1.0
...
192.168.1.255

Get Network hosts adresses as Range:, (*16)

$hosts = Network::parse('192.168.1.0/24')->hosts // Range(192.168.1.1, 192.168.1.254);
foreach($hosts as $ip) {
    echo (string)$ip . '<br>';
}
192.168.1.1
...
192.168.1.254

Count Network IP adresses, (*17)

echo count(Network::parse('192.168.1.0/24')) // 254

Range Operations

Define the range in different formats:, (*18)

$range = new Range(new IP('192.168.1.0'), new IP('192.168.1.255'));
$range = Range::parse('192.168.1.0-192.168.1.255');
$range = Range::parse('192.168.1.*');
$range = Range::parse('192.168.1.0/24');

Check if IP is within Range:, (*19)

echo Range::parse('192.168.1.1-192.168.1.254')->contains(new IP('192.168.1.5')); // true
echo Range::parse('::1-::ffff')->contains(new IP('::1234')); // true

Iterate over Range IP adresses:, (*20)

$range = Range::parse('192.168.1.1-192.168.1.254');
foreach($range as $ip) {
    echo (string)$ip . '<br>';
}
192.168.1.1
...
192.168.1.254

Get Networks that fit into a specified range of IP Adresses:, (*21)

$networks = Range::parse('192.168.1.1-192.168.1.254')->getNetworks();

foreach($networks as $network) {
    echo (string)$network . '<br>';
}
192.168.1.1/32
192.168.1.2/31
192.168.1.4/30
192.168.1.8/29
192.168.1.16/28
192.168.1.32/27
192.168.1.64/26
192.168.1.128/26
192.168.1.192/27
192.168.1.224/28
192.168.1.240/29
192.168.1.248/30
192.168.1.252/31
192.168.1.254/32

Count IP adresses in Range, (*22)

echo count(Range::parse('192.168.1.1-192.168.1.254')) // 254

License

The library is released under the MIT., (*23)

The Versions

07/02 2018

dev-master

9999999-dev

PHP Library for manipulating network addresses (IPv4 and IPv6)

  Sources   Download

MIT

The Requires

  • ext-bcmath *
  • php >=5.4.0

 

The Development Requires

ip ipv6 ipv4 subnet network cidr ip-tools

25/08 2016

v2.x-dev

2.9999999.9999999.9999999-dev

PHP Library for manipulating network addresses (IPv4 and IPv6)

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-bcmath *

 

The Development Requires

ip ipv6 ipv4 subnet network cidr ip-tools

21/08 2016

v1.1.0

1.1.0.0

PHP Library for manipulating network addresses (IPv4 and IPv6)

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-bcmath *

 

The Development Requires

ip ipv6 ipv4 subnet network cidr ip-tools

11/12 2015

v1.0.0

1.0.0.0

PHP Library for manipulating network addresses (IPv4 and IPv6)

  Sources   Download

MIT

The Requires

  • php >=5.4.0
  • ext-bcmath *

 

The Development Requires

ip ipv6 ipv4 subnet network cidr ip-tools

27/07 2015

v0.9.0

0.9.0.0

PHP Library for manipulating network addresses (IPv4 and IPv6)

  Sources   Download

MIT

The Requires

  • php >=5.3.0
  • ext-bcmath *

 

ip ipv6 ipv4 subnet network cidr ip-tools