For debugging purposes I frequently need to quickly convert ip addresses from one representation to another. Here is quick and dirty (I’ll cleanup the interface when get some free time) converter that does the job.
If you don’t see the form below because of some reason please proceed to this page.
The following formats are supported:
- integer
- unsigned integer
- dot notation
- hex number
- binary number
- octal number
- natural netmask
Please specify one of the following
36 || $base == 10) {
echo ‘BASE must be in the range 2-9 or 11-36’;
exit;
}
$charset = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
$charset = substr($charset, 0, $base);
if (!ereg(‘(^[0-9]{1,16}$)’, trim($decimal))) {
$error[‘dec_input’] = ‘Value must be a positive integer’;
return false;
}
do {
$remainder = bcmod($decimal, $base);
$char = substr($charset, $remainder, 1); // get CHAR from array
$string = “$char$string”; // prepend to output
$decimal = bcdiv(bcsub($decimal, $remainder), $base);
} while ($decimal > 0);
return $string;
}
function string2dec ($string, $base)
{
global $error;
$decimal = 0;
$base = (int)$base;
if ($base < 2 || $base > 36 || $base == 10) {
echo ‘BASE must be in the range 2-9 or 11-36’;
exit;
}
$charset = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
$charset = substr($charset, 0, $base);
$string = trim($string);
if (empty($string)) {
$error[] = ‘Input string is empty’;
return false;
}
do {
$char = substr($string, 0, 1); // extract leading character
$string = substr($string, 1); // drop leading character
$pos = strpos($charset, $char); // get offset in $charset
if ($pos === false) {
$error[] = “Illegal character ($char) in INPUT string”;
return false;
}
$decimal = bcadd(bcmul($decimal, $base), $pos);
} while($string <> null);
return $decimal;
}
function pad( $str, $num )
{
return str_repeat( “0”, $num – strlen( $str ) ).$str;
}
// main
if( isset( $_GET[“submit”] ) )
{
$ip = 0;
if( isset( $_GET[“int”] ) && $_GET[“int”] != “” )
{
$ip = $_GET[“int”];
}
else if( isset( $_GET[“dot”] ) && $_GET[“dot”] != “” )
{
$ip = ip2long( $_GET[“dot”] );
}
else
{
$ip = 0;
}
$uns_ip = ( $ip > 0 ? $ip : 0xffffffff + $ip + 1 ) + 0;
if( ( $uns_ip & 0x80000000 ) == 0 )
{
$mask = 0xff000000;
}
else if( ( $uns_ip & 0xC0000000 ) == -2147483648 )
{
$mask = 0xffff0000;
}
else if( ( $uns_ip & 0xE0000000 ) == -1073741824 )
{
$mask = 0xffffff00;
}
else
{
$mask = “”;
}
$dot_ip = long2ip( $uns_ip );
$hex_ip = dec2string( $uns_ip, 16 );
$hex_ip = “0x”.pad( $hex_ip, 8 );
$oct_ip = dec2string( $uns_ip, 8 );
$oct_ip = “0”.pad( $oct_ip, 16 );
$bin_ip = dec2string( $uns_ip, 2 );
$bin_ip = pad( $bin_ip, 32 );
?>
Conversion result
Dot notation | =$dot_ip?> |
---|---|
Decimal number | =$ip?> |
Unsigned decimal number | =$uns_ip?> |
Hexadecimal number | =$hex_ip?> |
Binary number | =$bin_ip?> |
Octal number | =$oct_ip?> |
Natural netmask | echo "$mask (".long2ip($mask).") " ?> |
} ?>
great tool! life saver!