Проверьте, есть ли IP-адрес в сети - PullRequest
4 голосов
/ 21 декабря 2011

Я ищу функцию, чтобы определить, находится ли данный IPv4-адрес в данной сети.

Это будет похоже на this ;однако я не хочу устанавливать полный каркас или заново изобретать колесо, если в этом нет необходимости.

Идея будет похожа на следующее:

function IsInNetwork($givenIP, $networkIP, $netmask) {
   // ???
}

$valid = IsInNetwork("10.0.9.35", "10.0.8.0", "255.255.254.0");

- РЕДАКТИРОВАТЬ -

С помощью Рича Адамса он указал мне правильное направление и придумал следующее:

function IsInNetwork2($givenIP, $networkIP, $netmask) 
{
    $ipaddr = ip2long($givenIP);
    $netip = ip2long($networkIP);
    $netmask = (ip2long($netmask) * -1) + $netip;

    if ($ipaddr >= $netip && $ipaddr <= $netmask){
        return true;
    } else {
        return false;
    }
}

1 Ответ

4 голосов
/ 21 декабря 2011

Как-то так должно работать,

function IsInNetwork($givenIP, $networkIP, $netmask)
{
    return ((ip2long($givenIP) & ip2long($networkIP)) == ip2long($network));
}

$valid = IsInNetwork("10.0.9.35", "10.0.8.0", "255.255.254.0"); // true
...