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/>.
|