Lan Calculator Online
";
}
return $mystr;
}
//--------------------------
//функция "добора" нулей в начале до 8 битов
//--------------------------
function addnull($binstr)
{
return str_pad($binstr, 8, "0", STR_PAD_LEFT);
}
//--------------------------
//функция вычисления пооктетно (поточечно)
//--------------------------
function bincalc($bin1,$bin2,$calc=1)
{
//распределение символов по массивам
$result1 = preg_split('//', $bin1, -1, PREG_SPLIT_NO_EMPTY);
$result2 = preg_split('//', $bin2, -1, PREG_SPLIT_NO_EMPTY);
for ($i=0;$i!=8;$i++)
{
if ($calc==1) //сложение (1+1=1; 1+0=1; 0+0=0)
{
if ($result1[$i]=="1" or $result2[$i]=="1")
$result3[$i]="1";
else
$result3[$i]="0";
}
elseif ($calc==2) //вычитание (первый бит должен быть всегда больше второго (1-1=0; 1-0=1; 0-0=0))
{
if ($result2[$i]=="0")
$result3[$i]="1";
else
$result3[$i]="0";
}
elseif ($calc==3) //логическое И (1+1=1; 1+0=0; 0+1=0; 0+0=0)
{
if ($result1[$i]=="1" and $result2[$i]=="1")
$result3[$i]="1";
else
$result3[$i]="0";
}
}
return implode("", $result3); //объединить массив в строку
}
//--------------------------
//парсинг ip адреса
//--------------------------
list($ip1,$ip2,$ip3,$ip4)=explode(".",$calc_ip);
$bit_ip1=addnull(decbin($ip1));
$bit_ip2=addnull(decbin($ip2));
$bit_ip3=addnull(decbin($ip3));
$bit_ip4=addnull(decbin($ip4));
$bit_ip=$bit_ip1.".".$bit_ip2.".".$bit_ip3.".".$bit_ip4;
//--------------------------
//парсинг маски
//--------------------------
if (substr_count($calc_mask,".")>0) //если маска в виде ипа
{
list($ip_mask1,$ip_mask2,$ip_mask3,$ip_mask4)=explode(".",$calc_mask);
$ip_mask=$calc_mask;
$bit_mask1=addnull(decbin($ip_mask1));
$bit_mask2=addnull(decbin($ip_mask2));
$bit_mask3=addnull(decbin($ip_mask3));
$bit_mask4=addnull(decbin($ip_mask4));
$bit_mask=$bit_mask1.".".$bit_mask2.".".$bit_mask3.".".$bit_mask4; //бинарная маска
}
else //если битовая маска, вычислить её в виде ипа
{
$bit_mask=""; //string
for ($i=1;$i!=33;$i++) {
if ($i32) echo "Маска задана неверно";
//--------------------------
//инверсия маски (wildcat for cisco) (255 - mask section)
//--------------------------
$cisco_bit_mask1=bincalc("11111111",$bit_mask1,2);
$cisco_bit_mask2=bincalc("11111111",$bit_mask2,2);
$cisco_bit_mask3=bincalc("11111111",$bit_mask3,2);
$cisco_bit_mask4=bincalc("11111111",$bit_mask4,2);
$cisco_mask1=bindec($cisco_bit_mask1);
$cisco_mask2=bindec($cisco_bit_mask2);
$cisco_mask3=bindec($cisco_bit_mask3);
$cisco_mask4=bindec($cisco_bit_mask4);
$cisco_mask=$cisco_mask1.".".$cisco_mask2.".".$cisco_mask3.".".$cisco_mask4;
$cisco_bit_mask=$cisco_bit_mask1.".".$cisco_bit_mask2.".".$cisco_bit_mask3.".".$cisco_bit_mask4;
//--------------------------
//broadcast = ip + invert_mask
//--------------------------
$bc_bit_ip1=bincalc($bit_ip1,$cisco_bit_mask1);
$bc_bit_ip2=bincalc($bit_ip2,$cisco_bit_mask2);
$bc_bit_ip3=bincalc($bit_ip3,$cisco_bit_mask3);
$bc_bit_ip4=bincalc($bit_ip4,$cisco_bit_mask4);
$bc_ip1=bindec($bc_bit_ip1);
$bc_ip2=bindec($bc_bit_ip2);
$bc_ip3=bindec($bc_bit_ip3);
$bc_ip4=bindec($bc_bit_ip4);
$bc_ip=$bc_ip1.".".$bc_ip2.".".$bc_ip3.".".$bc_ip4;
$bc_bit_ip=$bc_bit_ip1.".".$bc_bit_ip2.".".$bc_bit_ip3.".".$bc_bit_ip4;
//--------------------------
//network = ip + mask (AND)
//--------------------------
$net_bit_ip1=bincalc($bit_ip1,$bit_mask1,3);
$net_bit_ip2=bincalc($bit_ip2,$bit_mask2,3);
$net_bit_ip3=bincalc($bit_ip3,$bit_mask3,3);
$net_bit_ip4=bincalc($bit_ip4,$bit_mask4,3);
$net_ip1=bindec($net_bit_ip1);
$net_ip2=bindec($net_bit_ip2);
$net_ip3=bindec($net_bit_ip3);
$net_ip4=bindec($net_bit_ip4);
$net_ip=$net_ip1.".".$net_ip2.".".$net_ip3.".".$net_ip4;
$net_bit_ip=$net_bit_ip1.".".$net_bit_ip2.".".$net_bit_ip3.".".$net_bit_ip4;
//--------------------------
//ip min (network + 1)
//--------------------------
$net_min_ip=$net_ip1.".".$net_ip2.".".$net_ip3.".".($net_ip4+1);
$net_min_bit_ip=$net_bit_ip1.".".$net_bit_ip2.".".$net_bit_ip3.".".addnull(decbin($net_ip4+1));
//--------------------------
//ip max (broadcast - 1)
//--------------------------
$net_max_ip=$bc_ip1.".".$bc_ip2.".".$bc_ip3.".".($bc_ip4-1);
$net_max_bit_ip=$bc_bit_ip1.".".$bc_bit_ip2.".".$bc_bit_ip3.".".addnull(decbin($bc_ip4-1));
//--------------------------
//number of hosts = 2 ^ (32 - bitcount) - 2
//
//network class:
//0 - class A
//10 - Class B
//110 - Class C
//1110 - Class D
//11110 - Class E
//--------------------------
$host_count=abs(pow(2, 32-$bit_count)-2);
if ($bit_count>=16 and $bit_countClass A";
elseif (substr($net_bit_ip1, 0, 2)=="10") $host_class="Class B";
elseif (substr($net_bit_ip1, 0, 3)=="110") $host_class="Class C";
elseif (substr($net_bit_ip1, 0, 4)=="1110") $host_class="Class D";
elseif (substr($net_bit_ip1, 0, 5)=="11110") $host_class="Class E";
else $host_class="Class invalid";
?>
