MediaWiki  1.23.8
IP Class Reference

A collection of public static functions to play with IP address and IP blocks. More...

Static Public Member Functions

static canonicalize ( $addr)
 Convert some unusual representations of IPv4 addresses to their canonical dotted quad representation. More...
 
static combineHostAndPort ( $host, $port, $defaultPort=false)
 Given a host name and a port, combine them into host/port string like you might find in a URL. More...
 
static formatHex ( $hex)
 Convert an IPv4 or IPv6 hexadecimal representation back to readable format. More...
 
static hexToOctet ( $ip_hex)
 Converts a hexadecimal number to an IPv6 address in octet notation. More...
 
static hexToQuad ( $ip_hex)
 Converts a hexadecimal number to an IPv4 address in quad-dotted notation. More...
 
static isInRange ( $addr, $range)
 Determine if a given IPv4/IPv6 address is in a given CIDR network. More...
 
static isIPAddress ( $ip)
 Determine if a string is as valid IP address or network (CIDR prefix). More...
 
static isIPv4 ( $ip)
 Given a string, determine if it as valid IP in IPv4 only. More...
 
static isIPv6 ( $ip)
 Given a string, determine if it as valid IP in IPv6 only. More...
 
static isPublic ( $ip)
 Determine if an IP address really is an IP address, and if it is public, i.e. More...
 
static isValid ( $ip)
 Validate an IP address. More...
 
static isValidBlock ( $ipblock)
 Validate an IP Block (valid address WITH a valid prefix). More...
 
static parseCIDR ( $range)
 Convert a network specification in CIDR notation to an integer network and a number of bits. More...
 
static parseRange ( $range)
 Given a string range in a number of formats, return the start and end of the range in hexadecimal. More...
 
static prettifyIP ( $ip)
 Prettify an IP for display to end users. More...
 
static sanitizeIP ( $ip)
 Convert an IP into a verbose, uppercase, normalized form. More...
 
static sanitizeRange ( $range)
 Gets rid of unneeded numbers in quad-dotted/octet IP strings For example, 127.111.113.151/24 -> 127.111.113.0/24. More...
 
static splitHostAndPort ( $both)
 Given a host/port string, like one might find in the host part of a URL per RFC 2732, split the hostname part and the port part and return an array with an element for each. More...
 
static toHex ( $ip)
 Return a zero-padded upper case hexadecimal representation of an IP address. More...
 
static toOctet ( $ip_int)
 Given an unsigned integer, returns an IPv6 address in octet notation. More...
 
static toUnsigned ( $ip)
 Given an IP address in dotted-quad/octet notation, returns an unsigned integer. More...
 

Static Private Member Functions

static IPv6ToRawHex ( $ip)
 Given an IPv6 address in octet notation, returns a pure hex string. More...
 
static isPublic6 ( $ip)
 Determine if an IPv6 address really is an IP address, and if it is public, i.e. More...
 
static parseCIDR6 ( $range)
 Convert a network specification in IPv6 CIDR notation to an integer network and a number of bits. More...
 
static parseRange6 ( $range)
 Given a string range in a number of formats, return the start and end of the range in hexadecimal. More...
 
static toUnsigned6 ( $ip)
 

Detailed Description

A collection of public static functions to play with IP address and IP blocks.

Definition at line 65 of file IP.php.

Member Function Documentation

◆ canonicalize()

static IP::canonicalize (   $addr)
static

Convert some unusual representations of IPv4 addresses to their canonical dotted quad representation.

This currently only checks a few IPV4-to-IPv6 related cases. More unusual representations may be added later.

Parameters
string$addrsomething that might be an IP address
Returns
String: valid dotted quad IPv4 address or null

Definition at line 725 of file IP.php.

Referenced by IPTest\testIPCanonicalizeMappedAddress(), and IPTest\testIPCanonicalizeOnValidIp().

◆ combineHostAndPort()

static IP::combineHostAndPort (   $host,
  $port,
  $defaultPort = false 
)
static

Given a host name and a port, combine them into host/port string like you might find in a URL.

If the host contains a colon, wrap it in square brackets like in RFC 2732. If the port matches the default port, omit the port specification

Parameters
$hoststring
$portint
$defaultPortbool|int
Returns
string

Definition at line 289 of file IP.php.

Referenced by WebRequest\detectServer(), and IPTest\testCombineHostAndPort().

◆ formatHex()

static IP::formatHex (   $hex)
static

Convert an IPv4 or IPv6 hexadecimal representation back to readable format.

Parameters
string$hexnumber, with "v6-" prefix if it is IPv6
Returns
String: quad-dotted (IPv4) or octet notation (IPv6)

Definition at line 316 of file IP.php.

Referenced by ApiQueryBlocks\execute().

◆ hexToOctet()

static IP::hexToOctet (   $ip_hex)
static

Converts a hexadecimal number to an IPv6 address in octet notation.

Parameters
$ip_hexString: pure hex (no v6- prefix)
Returns
String (of format a:b:c:d:e:f:g:h)

Definition at line 330 of file IP.php.

Referenced by IPTest\testHexToOctet().

◆ hexToQuad()

static IP::hexToQuad (   $ip_hex)
static

Converts a hexadecimal number to an IPv4 address in quad-dotted notation.

Parameters
$ip_hexString: pure hex
Returns
String (of format a.b.c.d)

Definition at line 350 of file IP.php.

Referenced by IPTest\testHexToQuad().

◆ IPv6ToRawHex()

static IP::IPv6ToRawHex (   $ip)
staticprivate

Given an IPv6 address in octet notation, returns a pure hex string.

Parameters
string$ipoctet ipv6 IP address.
Returns
String: pure hex (uppercase)

Definition at line 466 of file IP.php.

◆ isInRange()

static IP::isInRange (   $addr,
  $range 
)
static

Determine if a given IPv4/IPv6 address is in a given CIDR network.

Parameters
string$addrthe address to check against the given range.
string$rangethe range to check the given address against.
Returns
Boolean: whether or not the given address is in the given range.

Definition at line 707 of file IP.php.

Referenced by Autopromote\checkCondition(), Block\isWhitelistedFromAutoblocks(), and IPTest\testIPIsInRange().

◆ isIPAddress()

static IP::isIPAddress (   $ip)
static

Determine if a string is as valid IP address or network (CIDR prefix).

SIIT IPv4-translated addresses are rejected. Note: canonicalize() tries to convert translated addresses to IPv4.

Parameters
string$ippossible IP address
Returns
Boolean

Definition at line 74 of file IP.php.

Referenced by RecentChange\checkIPAddress(), PopulateLogSearch\doDBUpdates(), SpecialContributions\execute(), SpecialLog\execute(), DeletedContributionsPage\execute(), LogEventsList\getExtraInputs(), ManualLogEntry\getRecentChange(), DeletedContributionsPage\getSubTitle(), SpecialBlock\getTargetUserTitle(), User\isBlockedGlobally(), RevDel_List\setVisibility(), and IPTest\testisIPAddress().

◆ isIPv4()

static IP::isIPv4 (   $ip)
static

Given a string, determine if it as valid IP in IPv4 only.

Note: Unlike isValid(), this looks for networks too.

Parameters
string$ippossible IP address
Returns
Boolean

Definition at line 96 of file IP.php.

Referenced by ApiQueryBlocks\execute(), SquidPurgeClient\getIP(), User\inDnsBlacklist(), IPTest\testisIPv4(), and SpecialBlock\validateTarget().

◆ isIPv6()

static IP::isIPv6 (   $ip)
static

Given a string, determine if it as valid IP in IPv6 only.

Note: Unlike isValid(), this looks for networks too.

Parameters
string$ippossible IP address
Returns
Boolean

Definition at line 85 of file IP.php.

Referenced by ApiQueryBlocks\execute(), SquidPurgeClient\getIP(), FileCacheBase\incrMissesRecent(), User\isIP(), User\pingLimiter(), IPTest\testisIPv6(), and SpecialBlock\validateTarget().

◆ isPublic()

static IP::isPublic (   $ip)
static

Determine if an IP address really is an IP address, and if it is public, i.e.

not RFC 1918 or similar

Parameters
$ipString
Returns
Boolean

Definition at line 372 of file IP.php.

Referenced by IPTest\testPrivateIPs().

◆ isPublic6()

static IP::isPublic6 (   $ip)
staticprivate

Determine if an IPv6 address really is an IP address, and if it is public, i.e.

not RFC 4193 or similar

Parameters
$ipString
Returns
Boolean

Definition at line 416 of file IP.php.

◆ isValid()

static IP::isValid (   $ip)
static

Validate an IP address.

Ranges are NOT considered valid. SIIT IPv4-translated addresses are rejected. Note: canonicalize() tries to convert translated addresses to IPv4.

Parameters
$ipString
Returns
Boolean: True if it is valid.

Definition at line 108 of file IP.php.

Referenced by GetLagTimes\execute(), Block\getBlocksForIPList(), Article\getRobotPolicy(), RequestContext\importScopedSession(), FileCacheBase\incrMissesRecent(), SpecialPasswordReset\onSubmit(), Block\parseTarget(), Article\showViewFooter(), IPTest\testInvalidIPs(), IPTest\testValidIPs(), and XmlDumpWriter\writeContributor().

◆ isValidBlock()

static IP::isValidBlock (   $ipblock)
static

Validate an IP Block (valid address WITH a valid prefix).

SIIT IPv4-translated addresses are rejected. Note: canonicalize() tries to convert translated addresses to IPv4.

Parameters
$ipblockString
Returns
Boolean: True if it is valid.

Definition at line 121 of file IP.php.

Referenced by Block\parseTarget(), IPTest\testInvalidBlocks(), and IPTest\testValidBlocks().

◆ parseCIDR()

static IP::parseCIDR (   $range)
static

Convert a network specification in CIDR notation to an integer network and a number of bits.

Parameters
string$rangeIP with CIDR prefix
Returns
array(int or string, int)

Definition at line 521 of file IP.php.

Referenced by IPTest\assertFalseCIDR(), IPTest\assertNet(), ApiQueryBlocks\execute(), and IPTest\testCIDRParsing().

◆ parseCIDR6()

static IP::parseCIDR6 (   $range)
staticprivate

Convert a network specification in IPv6 CIDR notation to an integer network and a number of bits.

Parameters
$range
Returns
array(string, int)

Definition at line 614 of file IP.php.

◆ parseRange()

static IP::parseRange (   $range)
static

Given a string range in a number of formats, return the start and end of the range in hexadecimal.

Formats are: 1.2.3.4/24 CIDR 1.2.3.4 - 1.2.3.5 Explicit range 1.2.3.4 Single IP

2001:0db8:85a3::7344/96 CIDR 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range 2001:0db8:85a3::7344 Single IP

Parameters
string$rangeIP range
Returns
array(string, string)

Definition at line 564 of file IP.php.

Referenced by ApiQueryBlocks\execute(), Block\getRangeEnd(), Block\getRangeStart(), Block\newLoad(), User\pingLimiter(), and SpecialBlockList\showList().

◆ parseRange6()

static IP::parseRange6 (   $range)
staticprivate

Given a string range in a number of formats, return the start and end of the range in hexadecimal.

For IPv6.

Formats are: 2001:0db8:85a3::7344/96 CIDR 2001:0db8:85a3::7344 - 2001:0db8:85a3::7344 Explicit range 2001:0db8:85a3::7344/96 Single IP

Parameters
$range
Returns
array(string, string)

Definition at line 655 of file IP.php.

◆ prettifyIP()

static IP::prettifyIP (   $ip)
static

Prettify an IP for display to end users.

This will make it more compact and lower-case.

Parameters
$ipstring
Returns
string

Definition at line 187 of file IP.php.

Referenced by IPTest\testPrettifyIP(), and Linker\userLink().

◆ sanitizeIP()

static IP::sanitizeIP (   $ip)
static

Convert an IP into a verbose, uppercase, normalized form.

IPv6 addresses in octet notation are expanded to 8 words. IPv4 addresses are just trimmed.

Parameters
string$ipIP address in quad or octet form (CIDR or not).
Returns
String

Definition at line 134 of file IP.php.

Referenced by BlockTest\addXffBlocks(), ApiQueryLogEvents\execute(), User\getName(), LogPager\limitPerformer(), Block\parseTarget(), MediaWikiTitleCodec\splitTitleString(), and IPTest\testSanitizeIP().

◆ sanitizeRange()

static IP::sanitizeRange (   $range)
static

Gets rid of unneeded numbers in quad-dotted/octet IP strings For example, 127.111.113.151/24 -> 127.111.113.0/24.

Parameters
string$rangeIP address to normalize
Returns
string

Definition at line 763 of file IP.php.

Referenced by BlockTest\addXffBlocks(), FileCacheBase\incrMissesRecent(), Block\parseTarget(), and IPTest\testSanitizeRange().

◆ splitHostAndPort()

static IP::splitHostAndPort (   $both)
static

Given a host/port string, like one might find in the host part of a URL per RFC 2732, split the hostname part and the port part and return an array with an element for each.

If there is no port part, the array will have false in place of the port. If the string was invalid in some way, false is returned.

This was easy with IPv4 and was generally done in an ad-hoc way, but with IPv6 it's somewhat more complicated due to the need to parse the square brackets and colons.

A bare IPv6 address is accepted despite the lack of square brackets.

Parameters
string$bothThe string with the host and port
Returns
array

Definition at line 240 of file IP.php.

Referenced by MemcachedPeclBagOStuff\__construct(), WebRequest\detectServer(), RedisConnectionPool\getConnection(), DatabaseMysqli\mysqlConnect(), and IPTest\testSplitHostAndPort().

◆ toHex()

static IP::toHex (   $ip)
static

Return a zero-padded upper case hexadecimal representation of an IP address.

Hexadecimal addresses are used because they can easily be extended to IPv6 support. To separate the ranges, the return value from this function for an IPv6 address will be prefixed with "v6-", a non- hexadecimal string which sorts after the IPv4 addresses.

Parameters
string$ipquad dotted/octet IP address.
Returns
String

Definition at line 447 of file IP.php.

Referenced by Block\chooseBlock(), Block\getBlocksForIPList(), Block\getRangeEnd(), Block\getRangeStart(), Block\newLoad(), and IPTest\testToHex().

◆ toOctet()

static IP::toOctet (   $ip_int)
static

Given an unsigned integer, returns an IPv6 address in octet notation.

Parameters
$ip_intString: IP address.
Returns
String

Definition at line 306 of file IP.php.

◆ toUnsigned()

static IP::toUnsigned (   $ip)
static

Given an IP address in dotted-quad/octet notation, returns an unsigned integer.

Like ip2long() except that it actually works and has a consistent error return value.

Parameters
string$ipquad dotted IP address.
Returns
Mixed: string/int/false

Definition at line 486 of file IP.php.

Referenced by IPTest\testToUnsigned().

◆ toUnsigned6()

static IP::toUnsigned6 (   $ip)
staticprivate
Parameters
$ip
Returns
String

Definition at line 510 of file IP.php.


The documentation for this class was generated from the following file: