ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘netmask’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Многие ищут/спрашивают функции для проверок IP-адресов на вхождение в подсеть, итак:

Perl

#!/usr/bin/perl
# Пример вызова и проверки IP-адреса 192.168.0.4
# на принадлежность к сети 192.168.0.0 с маской 255.255.255.248
#
if (ip_vs_net("192.168.0.4","192.168.0.0","255.255.255.248")){
    print "Адрес принадлежит сети\n";
}else{
    print "Адрес не входит в подсеть\n";
}
#Подпрограмма перевода IP в число
sub aton{
    my $addr=shift;
    (my $a0, my $a1, my $a2, my $a3)=split('\.',$addr);
    return $a3+($a2<<8)+($a1<<16)+($a0<<24);
}
#Подпрограмма перевода числа в IP
sub ntoa{
    my $ip=shift;
    return sprintf("%d.%d.%d.%d",
    (($ip&0xFF000000)>>24),(($ip&0xFF0000)>>16),(($ip&0xFF00)>>8),($ip&0xFF));
}
#Подпрограмма проверки вхождения IP в подсеть
sub ip_vs_net{
    my $ip=shift;
    my $network=shift;
    my $mask=shift;
    if((aton($ip)&aton($mask))==aton($network)){
        return 1;
    }else{
        return 0;
    }
}

PHP

<?
// Пример вызова и проверки IP-адреса 192.168.0.4
// на принадлежность к сети 192.168.0.0 с маской 255.255.255.248
if (ip_vs_net("192.168.0.4","192.168.0.0","255.255.255.248")){
    print "Адрес принадлежит сети<BR>";
}else{
    print "Адрес не входит в подсеть<BR>";
}
function ip_vs_net($ip,$network,$mask){
   if (((ip2long($ip))&(ip2long($mask)))==ip2long($network)){
       return 1;
   }else{
       return 0;
   }
}
?>

Функции которые переводят из CIDR в обычную маску и наоборот
<?
function cidr_2_mask($mask){
    return long2ip(pow(2,32) - pow(2, (32-$mask)));
}

function mask_2_cidr($mask){
    $a=strpos(decbin(ip2long($mask)),"0");
    if (!$a){$a=32;}
    return $a;
}
?>
Пример:
<?
     printf("%s",cidr_2_mask("24"));
     //Напечает 255.255.255.0

      printf("%s",mask_2_cidr("255.255.255.0"));
     //Напечает 24
?>

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 5,00 из 5)
Loading...Loading...
Отправить на почту Отправить на почту

CIDR — Classless InterDomain Routing — Бесклассовая адресация

Как выяснить маску подсети исходя из CIDR ?

В кач-ве примера будем использовать
IP-адрес 213.45.64.123 с CIDR /27:

Необходимо взять кол-во бит из CIDR (в бинарном виде), разбить на 4-ре октета и перевести в десятичные.

1. запишем первые 27 бит как 1-цу, а остальные 5-ть (т.к. их всего 32 бита) как 0-ль

11111111111111111111111111100000

2. Разделим на 4-ре октета

11111111.11111111.11111111.11100000

3. Переведем в десятичную систему

255.255.255.224

Вот и все. Получили что /27 равен маске 255.255.255.224

Так же полезно просто помнить что:
сети класса A — это CIDR /8
сети класса B — это CIDR /16
сети класса С — это CIDR /24

————————————————————

Как по CIDR определить адрес сети, широковещательный адрес (broadcast), число хостов в сети ?

В кач-ве примера будем использовать тот же IP-адрес 213.45.64.123 с CIDR /27:

1. 32-27=5 бит

2. 2-йка в пятой степени = 32, а значит получается что рабочих IP-адресов в этой сети 30-ть (т.к. 1-ый адрес это адрес сети, а последний это broadcast)

3. Смотрим последний октет IP-адреса (213.45.64.123), в 123-х целых 32-ек укладывается 3 раза, а значит адрес сети 213.45.64.96 — это 32 умножить на 3 (32х3=96)

4. Широковещательным адресом (broadcast) будет 213.45.64.127 — это 32 умножить на 4 и отнять 1 (32х4-1=127)

————————————————————

Как по хосту и маске подсети определить адрес сети, широковещательный адрес (broadcast), число хостов в сети ?

В кач-ве примера будем использовать IP-адрес 192.168.32.48 с маской подсети 255.255.255.192:

1. 256-192=64, где 192 это последний октет из маски (255.255.255.192), а 64 это общее кол-во хостов в сети,
т.к. 1-ый адрес это адрес сети, а последний это broadcast получаем 62 рабочих хоста в сети.

2. Смотрим последний октет IP-адреса (192.168.32.48), в 48 целых 64-рок укладывается ноль получаем адрес сети 192.168.32.0 (0x64=0)

3. Широковещательным адресом (broadcast) будет 192.168.32.63 (64×1-1=63)

————————————————————

Или воспользуйтесь нашим IP Subnet Calculator :)

Ссылки:

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 4,00 из 5)
Loading...Loading...
Отправить на почту Отправить на почту