PHP Classes

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    
Ratings Unique User Downloads Download Rankings
Not yet rated by the usersTotal: 142 All time: 9,097 This week: 163Up
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.

Picture of Kjell-Inge Gustafsson
  Performance   Level  
Name: Kjell-Inge Gustafsson <contact>
Classes: 15 packages by
Country: Sweden Sweden
Age: ???
All time rank: 4972 in Sweden Sweden
Week rank: 146 Up2 in Sweden Sweden Equal
Innovation award
Innovation award
Nominee: 6x

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:142
This week:0
All time:9,097
This week:163Up