Net_IPv4 Coolness

Available from the PEAR website, http://pear.php.net/package/Net_IPv4, the Net_IPv4 package is pretty cool. Check this out:

<?php
require_once(“IPv4.php”);
$ip = $argv[1];
$netmask = $argv[2];

$ip_calc = new Net_IPv4();
$ip_calc->ip = $ip;
$ip_calc->netmask = $netmask;
$ip_calc->calculate();
$ip_calc->min = $ip_calc->network;
$ip_calc->max = $ip_calc->broadcast;
$ip_calc->min_long = $ip_calc->ip2double($ip_calc->network);
$ip_calc->max_long = $ip_calc->ip2double($ip_calc->broadcast);
$ip_calc->gateway = long2ip($ip_calc->max_long-1);

print_r($ip_calc);
?>

Note: Big assumption here that gateway is broadcast-1. That’s the way it is on many networks, but doesn’t have to be.

Here is the output:

# php ipcalc.php 208.109.29.13 255.255.255.224
Net_IPv4 Object
(
[ip] => 208.109.29.13
[bitmask] => 27
[netmask] => 255.255.255.224
[network] => 208.109.29.0
[broadcast] => 208.109.29.31
[long] => 3496811789
[min] => 208.109.29.0
[max] => 208.109.29.31
[min_long] => 3496811776
[max_long] => 3496811807
[gateway] => 208.109.29.30
)

Let’s try a variation of this, to print out a bitmask to netmask table:

<?php
require_once(“IPv4.php”);

$ip = ‘208.109.29.0’;

$ip_calc = new Net_IPv4();
$ip_calc->ip = $ip;
for ($i=0; $i<=32; $i++)
{
$ip_calc->bitmask = $i;
$ip_calc->calculate();
$ip_calc->min = $ip_calc->network;
$ip_calc->max = $ip_calc->broadcast;
$ip_calc->min_long = $ip_calc->ip2double($ip_calc->network);
$ip_calc->max_long = $ip_calc->ip2double($ip_calc->broadcast);
$numips = $ip_calc->max_long – $ip_calc->min_long +1;

print “/$i = “. $ip_calc->netmask .”(RANGE: {$ip_calc->min}-{$ip_calc->max} [$numips ips])n”;
}

?>

Which outputs:

/0 = 0.0.0.0(RANGE: 0.0.0.0-255.255.255.255 [4294967296 ips])
/1 = 128.0.0.0(RANGE: 128.0.0.0-255.255.255.255 [2147483648 ips])
/2 = 192.0.0.0(RANGE: 192.0.0.0-255.255.255.255 [1073741824 ips])
/3 = 224.0.0.0(RANGE: 192.0.0.0-223.255.255.255 [536870912 ips])
/4 = 240.0.0.0(RANGE: 208.0.0.0-223.255.255.255 [268435456 ips])
/5 = 248.0.0.0(RANGE: 208.0.0.0-215.255.255.255 [134217728 ips])
/6 = 252.0.0.0(RANGE: 208.0.0.0-211.255.255.255 [67108864 ips])
/7 = 254.0.0.0(RANGE: 208.0.0.0-209.255.255.255 [33554432 ips])
/8 = 255.0.0.0(RANGE: 208.0.0.0-208.255.255.255 [16777216 ips])
/9 = 255.128.0.0(RANGE: 208.0.0.0-208.127.255.255 [8388608 ips])
/10 = 255.192.0.0(RANGE: 208.64.0.0-208.127.255.255 [4194304 ips])
/11 = 255.224.0.0(RANGE: 208.96.0.0-208.127.255.255 [2097152 ips])
/12 = 255.240.0.0(RANGE: 208.96.0.0-208.111.255.255 [1048576 ips])
/13 = 255.248.0.0(RANGE: 208.104.0.0-208.111.255.255 [524288 ips])
/14 = 255.252.0.0(RANGE: 208.108.0.0-208.111.255.255 [262144 ips])
/15 = 255.254.0.0(RANGE: 208.108.0.0-208.109.255.255 [131072 ips])
/16 = 255.255.0.0(RANGE: 208.109.0.0-208.109.255.255 [65536 ips])
/17 = 255.255.128.0(RANGE: 208.109.0.0-208.109.127.255 [32768 ips])
/18 = 255.255.192.0(RANGE: 208.109.0.0-208.109.63.255 [16384 ips])
/19 = 255.255.224.0(RANGE: 208.109.0.0-208.109.31.255 [8192 ips])
/20 = 255.255.240.0(RANGE: 208.109.16.0-208.109.31.255 [4096 ips])
/21 = 255.255.248.0(RANGE: 208.109.24.0-208.109.31.255 [2048 ips])
/22 = 255.255.252.0(RANGE: 208.109.28.0-208.109.31.255 [1024 ips])
/23 = 255.255.254.0(RANGE: 208.109.28.0-208.109.29.255 [512 ips])
/24 = 255.255.255.0(RANGE: 208.109.29.0-208.109.29.255 [256 ips])
/25 = 255.255.255.128(RANGE: 208.109.29.0-208.109.29.127 [128 ips])
/26 = 255.255.255.192(RANGE: 208.109.29.0-208.109.29.63 [64 ips])
/27 = 255.255.255.224(RANGE: 208.109.29.0-208.109.29.31 [32 ips])
/28 = 255.255.255.240(RANGE: 208.109.29.0-208.109.29.15 [16 ips])
/29 = 255.255.255.248(RANGE: 208.109.29.0-208.109.29.7 [8 ips])
/30 = 255.255.255.252(RANGE: 208.109.29.0-208.109.29.3 [4 ips])
/31 = 255.255.255.254(RANGE: 208.109.29.0-208.109.29.1 [2 ips])
/32 = 255.255.255.255(RANGE: 208.109.29.0-208.109.29.0 [1 ips])

Comments are closed.