URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 2368
[ Назад ]

Исходное сообщение
"Ip calculatro только на PHP"

Отправлено alex_mz , 02-Июн-04 10:22 
Может кто знает как реализовать функцию которую нисполняет например скрипт написаный на перле :
http://jodies.de/ipcalc?host=192.168.0.1&mask1=24&mask2=
только на  PHP.
Чтобы на входе было например
192.168.0.1/24 а на выходе 192.168.0.1-192.168.0.254
Заранее большое спасибо

Содержание

Сообщения в этом обсуждении
"Ip calculatro только на PHP"
Отправлено dev , 02-Июн-04 14:18 
>Может кто знает как реализовать функцию которую нисполняет например скрипт написаный на
>перле :
>http://jodies.de/ipcalc?host=192.168.0.1&mask1=24&mask2=
>только на  PHP.
>Чтобы на входе было например
>192.168.0.1/24 а на выходе 192.168.0.1-192.168.0.254
>Заранее большое спасибо

было б чего тут реализовывать :)

<?
        function net2cidr($net)
        {
                for($n = 0; $net && 0xFFFF; $n++) {
                        $net = $net << 1;
                }
                return $n;
        }

        function cidr2net($cidr)
        {
                $net = 1;
                for($n = 0; $n < 31-$cidr; $n++) {
                        $net = $net << 1 | 1;
                }
                return ~$net;
        }

        function bin2string($bin) {
                $res = "";
                for($p=31; $p >= 0; $p--) {
                        $res .= ($bin & (1 << $p)) ? "1" : "0";
                        if($p > 0 && $p % 8 == 0) $res .= " ";
                }
                return $res;
        }

        $ip   = $_GET['ip'];
        $mask = $_GET['mask'];
        $cidr = $_GET['cidr'];

        if($mask)
                $cidr  = net2cidr(ip2long($mask));
        else
                $mask = long2ip(cidr2net($cidr));

        $lIp   = ip2long($ip);
        $lMask = ip2long($mask);

        $lNet       = $lIp & $lMask;
        $lBroadcast = $lNet | (~$lMask);
        $lMin       = $lNet + 1;
        $lMax       = $lBroadcast - 1;

        $net       = long2ip($lNet);
        $broadcast = long2ip($lBroadcast);
        $min       = long2ip($lMin);
        $max       = long2ip($lMax);

        $bIp        = bin2string($lIp);
        $bMask      = bin2string($lMask);
        $bNet       = bin2string($lNet);
        $bBroadcast = bin2string($lBroadcast);
        $bMin       = bin2string($lMin);
        $bMax       = bin2string($lMax);
?>
<html>

<head>
        <title>IP Calc</title>
</head>

<body>

<h1>IP Calc</h1>

<table>
<form action=ip.php method=GET>
        <tr><td>IP</td><td><input type=input name=ip value="<?= $_GET['ip'] ?>"></td></tr>
        <tr><td>Mask</td><td><input type=input name=mask value="<?= $_GET['mask'] ?>"></td></tr>
        <tr><td>CIDR</td><td><input type=input name=cidr value="<?= $_GET['cidr'] ?>"></td></tr>
        <tr><td> </td><td><input type=submit value=Calc></td></tr>
</form>
</table>

<h2>Result</h2>

<table>
        <tr><td>IP</td><td><?= $ip ?></td><td><?= $bIp ?></td></tr>
        <tr><td>Mask</td><td><?= $mask ?></td><td><?= $bMask ?></td></tr>
        <tr><td>Net</td><td><?= $net ?></td><td><?= $bNet ?></td></tr>
        <tr><td>CIDR</td><td><?= $cidr ?></td><td> </td></tr>
        <tr><td>Broadcast</td><td><?= $broadcast ?></td><td><?= $bBroadcast ?></td></tr>
        <tr><td>Min</td><td><?= $min ?></td><td><?= $bMin ?></td></tr>
        <tr><td>Max</td><td><?= $max ?></td><td><?= $bMax ?></td></tr>
</table>

</body>

</html>


"Ip calculatro только на PHP"
Отправлено alex_mz , 03-Июн-04 10:06 
То что надо ... ОГРОМНОЕ спасибо...