PHP Classes
elePHPant
Icontem

PHP IP Tools: Validate and manipulate IP addresses

Recommend this page to a friend!
  Info   View files Documentation   View files View files (8)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2019-11-06 (2 months ago) RSS 2.0 feedNot yet rated by the usersTotal: 96 This week: 4All time: 9,321 This week: 79Up
Version License PHP version Categories
iptools 1.0.0GNU Lesser Genera...5Networking, PHP 5, Validation
Description Author

This class can validate and manipulate IP addresses.

It can take a given IP address of either in IPv4 or IPv6 versions and can perform several types of operations. Currently it can:

- Validate the IP address
- Check if the address is within a list of valid IP ranges
- Convert a CIDR to a mask
- Parse the address to check if it contains a port number
- Convert the IP address between the string format and binary format
- Etc.

  Performance   Level  
Name: Kjell-Inge Gustafsson <contact>
Classes: 6 packages by
Country: Sweden Sweden
Innovation award
Innovation award
Nominee: 2x

 

Details
ipTools

  is a PHP IP number utility toolbox

"Don't thrust an IP address... ", but sometime you have to deal with them.

Provides IP v4/v6
    validation: IP in IP/network(CIDR) ranges
and util services:
    is valid IP,
    expand/compress IP number
    IP number to binary and reverse
    netmask/cidr etc


With courtesy of and inspiration from Paul Gregg <pgregg_at_pgregg_dot_com>
and the excellent functions decbin32 and ip_in_range.

INSTALL

Composer

  composer require kigkonsult/ipTools

or add 

  require_once '[path/]ipTools/autoload.php';

to your PHP-script

Namespace is Kigkonsult\IpTools.


USAGE 
 
How to check an IPv4/v6 number is valid and in a validity range :

1 - Build a validity range filter

<?php
$validityRange = [
    '192.168.0.1',                // specific match 
    '192.168.0.10-192.168.0.20'   // within a range
    '192.168.1.*                  // with wildcard
    '192.168.2.0/25               // cidr
    '192.168.3.0/255.255.255.128' // or netmask
];

For filters in detail, examine IpTool::isIpNumInRange, below. 


2a - 'ad hoc' check

<?php
use Kigkonsult\IpTools\IpTool;

if( ! Iptool::factory( $validityRange )->checkIPnumInRange( $IpNumToTest )) {
    echo 'error message';
}

Format : Iptool::factory( [ filter ] )
    filter array|string 
    throws InvalidArgumentException on invalid filter. 


2b - class instance check (with added filter)

<?php
use Kigkonsult\IpTools\IpTool;

$ipValidator = new Iptool( $baseFilterArr );
...
$adHocFilter = '192.168.4.*';
...
if( ! $ipValidator->addFilter( $adHocFilter )
    ->checkIPnumInRange( $IpNumToTest )) {
    echo 'error message';
}

Format Iptool::__construct( [ filter ] )
    filter array|string 
    throws InvalidArgumentException on invalid filter.

Format IpTool::AddFilter( filter )
    filter array|string 
    throws InvalidArgumentException on invalid filter. 

Format IpTool::deleteFilter()
     removes filter 
 
Format IpTool::getFilter() 
     returns (array) filter.


(static) METHODS

Here you will find of IPnumber utility methods      

    IpTool::isValidIP( ipNum )
        Return bool true on valid IP (string) v4/v6 number
      
    IpTool::expand( ipNum )
      Return expanded (string)
        IPv4 number to 4 octets
        full IPv6 number
      
    IpTool::isIpNumInRange( ipNum , array acceptRanges [, & matchIx ] )
        Return bool true if (valid) (string) IPv4/v6 number match
            (any element in array of) IPv4/v6-network filter range(s)
        on found, (int) matchIx holds the filter range array index
        For filters in detail, examine IpTool::isIpv4InRange and IpTool::isIpv6InRange, below.
     
    cidr2NetmaskBin( cidr, bitNum )
        Return (int) IPv4/v6 CIDR block as binary
        bitNum: (int) 32 (IpV4)  / 128 (IpV6)
    

IPv4 utility methods

    IpTool::isValidIPv4( ipNum )
        Return bool true on valid (string) IPv4 number

    IpTool::hasIPv4port( ipNum )
        Return bool true if IP v4 number has trailing port

    IpTool::getIPv4port( ipNum )
        Return IP v4 port

    IpTool::getIPv4withoutPort( ipNum )
        Return IP v4 without port

    IpTool::IPv42bin( ipNum )
        Return (string) IPv4 number as binary

    IpTool::bin2IPv4( IPbin )
        Return binary as IPv4 number

    IpTool::IpTool::decbin32( dec )
        Return binary string (left-)padded to 32 bit numbers
      
    IpTool::IpTool::hasIPv4ValidHost( ipNum )
        Return true if hostName exists for a valid (string) IPv4 number and resolves back

    IpTool::expandIPv4( $ipNum )
        Return expanded (string) IPv4 number to 4 octets

    IpTool::isValidIPv4Cidr( cidr )
        Return bool true on valid (int) IPv4 cidr

    IpTool::ipv4CIDR2Netmask( cidr )
        Return (int) IPv4 cidr as netmask
      
    IpTool::ipv4Netmask2Cidr( netmask )
        Return (string) IPv4 netmask as cidr
    
    IpTool::getNetworkFromIpv4Cidr( ipNum, cidr )
        Return IPv4 network from (string) IPv4num and (int) cidr

    IpTool::IPv4Breakout( ipAddress, ipNetmaskCidr [, outputAsIpNum = false ] )
        Return array( network, firstIp, lastIP, broadcastIp )
        ipAddress string
        ipNetmaskCidr = (string) netmask or (int) cidr
        outputAsIpNum = false returns binary
        outputAsIpNum = true returns (string) Ipv4 numbers


    IpTool::isIPv4InRange( ipNum , array acceptRanges [, & matchIx ] )
        Return true if (valid) (string) IPv4 match any element in array of IPv4/network ranges
        on found, (int) matchIx holds the filter range array index

    IPv4 network filter ranges can be specified as:

    example                 - type 
    -------                   ---- 
    '*'                     - Accept all IPs //  warning, accepts all
    '1.2.3.4'               - Specific Ipv4 
    '1.2.3.*'               - Ipv4 with wildcard
    '1.2.3/24'              - Ipv4 with cidr
    '1.2.3.4/255.255.255.0' - Ipv4/netmask format
    '1.2.3.0-1.2.3.255'     - Start-End Ipv4 range, note, '-' as separator
    NOTE, a search for match is done array order !!


IPv6 utility methods

    IpTool::isValidIPv6( ipNum )
        Return true on valid (string) IPv6 number

    IpTool::hasIPv6port( ipNum )
        Return bool true if IP v6 number has trailing port

    IpTool::getIPv6port( ipNum )
        Return IP v6 port

    IpTool::getIPv6withoutPort( ipNum )
        Return IP v6 without port

    IpTool::isIPv4MappedIPv6( ipNum )
        Return bool true if (string) IP is v4 mapped IPv6
      
    IpTool::IPv62bin( ipNum )
        Return IPv6 number as binary
      
    IpTool::bin2IPv6( IPbin )
        Return binary string as IPv6 number
      
    IpTool::getIPv6InterfaceIdentifier( ipNum )
        Return (unicast/anycast) (string) IPv6 number interface identifier
      (last 64 bits as hex)

    IpTool::getIPv6NetworkPrefix( ipNum )
        Return (unicast/anycast) (string) IPv6 number network prefix
      (first 64 bits as hex)
      
    IpTool::expandIPv6( ipNum )
      Return expanded (condensed) full (string) IP v6 number

    IpTool::compressIPv6( ipNum )
        ipNum string
        Return condensed IPv6 number or IPv6 bitBlock group
      
    IpTool::isValidIPv6Cidr( cidr )
        Return bool true on valid (int) IP v6 cidr

    IpTool::isIPv6InRange( ipNum , array acceptRanges [, & matchIx ] )
        Return bool true if (valid) IP number match any element in array of IP/network ranges
        ipNum string
        on found, (int) matchIx holds the filter range array index

    IPv6 network filter ranges can be specified as:

    example               - type
    -------                 ---- 
    '*'                   - Accept all IPs //  warning, accepts all
    '<IPv6num>'           - Specific Ipv6 
    '<IPv6num>/82'        - Ipv6 with cidr 
    '<IPv6num>-<IPv6num>' - Start-End Ipv6 range, note, '-' as separator

    NOTE, a search for match is done array order !!


Copyright (c) 2019 Kjell-Inge Gustafsson, kigkonsult, All rights reserved
Link      https://kigkonsult.se
Package   ipTools
Version   1.1.2
License   Subject matter of licence is the software ipTools.
          The above copyright, link, package and version notices and
          this licence notice shall be included in all copies or
          substantial portions of the ipTools.

          ipTools is free software: you can redistribute it and/or modify
          it under the terms of the GNU Lesser General Public License as published
          by the Free Software Foundation, either version 3 of the License,
          or (at your option) any later version.

          ipTools is distributed in the hope that it will be useful,
          but WITHOUT ANY WARRANTY; without even the implied warranty of
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
          GNU Lesser General Public License for more details.

          You should have received a copy of the GNU Lesser General Public License
          along with ipTools. If not, see <https://www.gnu.org/licenses/>.
  Files folder image Files  
File Role Description
Files folder imagedocs (2 files)
Files folder imagesrc (1 file)
Files folder imagetest (1 file)
Accessible without login Plain text file autoload.php Aux. Auxiliary script
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Plain text file README.md Class Class source

  Files folder image Files  /  docs  
File Role Description
  Accessible without login Plain text file lgpl.txt Doc. Documentation
  Accessible without login Plain text file README.txt Doc. Documentation

  Files folder image Files  /  src  
File Role Description
  Plain text file IpTool.php Class Class source

  Files folder image Files  /  test  
File Role Description
  Plain text file IpToolsTest.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:96
This week:4
All time:9,321
This week:79Up