Сайт | Лаборатория | Форум | Wikiservia



In english

harpywar.com

Главная

Вики

Форум

Лаборатория

 Статьи
   Игры
   Настройка серверов
     PvPGN
     D2GS
     NFS: U
     Apache
     ArcEmu

   Кодинг
     .NET
     PHP

   Разное

 Проекты
   QDoom
   IRC Search
   vbreality [web]
   UTech p2p Realm [web]
   PvPGN система статистики
   Diablo 2 Launcher
   WoW Simple Launcher

 Моё
   Творчество
   Оборудование

Поиск по сайту


Хостинг и VDS, скидка при переходе
 
Символ обратного слеша «⁄» [x]
Немного о PHP
Запуск скриптов через php.exe
Сканирование игровых серверов через PHP
Калькулятор сетевых адресов
Калькулятор сетевых адресовСоздано: 13.08.2007
Изменено: 03.05.2008
Автор: HarpyWar

Про сетевую маску

Маска может состоять от 1 до 32 включенных битов.
Для того чтобы понять, что такое маска вообще, необходимо представить её в виде 4 секций по 8 бит в каждой:

11111111.11111111.11100000.10000000

Эта запись означает, что в маске 19 включенных битов (единиц), и если перевести каждую секцию в десятичную систему, получим 255.255.254.0
Тем самым, запись после слеша, типа 192.168.1.0/24, не что иное, как количество этих самых включенных битов в маске.

Подробную информацию про маску подсети смотрим в Википедии.


Алгоритм расчета диапазона ип адресов на примере 12.34.56.78/20

1. Вычисляем инверсию маски (cisco wilcard - используется в списках доступа (ACL) сетевого оборудования Cisco)
    Из 255.255.255.255 нужно вычесть пооктетно (поточечно, переведя каждую секцию в двоичный код) данную маску:

    11111111.11111111.11111111.11111111 (255.255.255.255)
    -
    11111111.11111111.11110000.00000000 (255.255.240.0 = 20)
    =
    00000000.00000000.00001111.11111111 (0.0.15.255)

2. Вычисляем последний адрес сети (broadcast)
    К данному IP адресу нужно пооктетно прибавить инверсию маски. К каждой секции ип адреса добавляем в начало недостающие нули. Для сложения используем метод ИЛИ (1+1=1; 1+0=1; 0+1=1; 0+0=0):

    00001100.00100010.00111000.01001110 (12.34.56.78)
    +
    00000000.00000000.00001111.11111111 (0.0.15.255)
    =
    00001100.00100010.00111111.11111111 (12.34.63.255)

3. Вычисляем адрес сети
    К данному IP адресу нужно пооктетно прибавить данную маску. Для сложения используем метод И (1+1=1; 1+0=0; 0+1=0; 0+0=0):

    00001100.00100010.00111000.01001110 (12.34.56.78)
    +
    11111111.11111111.11110000.00000000 (255.255.240.0 = 20)
    =
    00001100.00100010.00110000.00000000 (12.34.48.0)

4. Вычисляем диапазон и количество хостов в сети
    Вычислять здесь особо нечего. Минимальный ип адрес равен адресу сети + 1, а максимальный = броадкаст - 1:

    Min = 00001100.00100010.00110000.00000000 (12.34.48.1)
    Max = 00001100.00100010.00111111.11111111 (12.34.63.254)

    Количество хостов в сети = 2 ^ (32 - кол-во_бит_в_маске) - 2

    Класс сети определяется ее первыми битами:

    0 - class A
    10 - Class B
    110 - Class C
    1110 - Class D
    11110 - Class E

Итак, диапазон сети в нашем примере равен 12.34.48.0/20 (с 12.34.48.1 до 12.34.63.254)


Пример этого калькулятора в моем исполнении на PHP можно посмотреть по ссылке. Ниже можно скачать его исходный код.
Так же, я написал его на JavaScript - можно посмотреть здесь.

--
Другие IP кулькуляторы:

jodies.de/ipcalc
opennet.ru/ipcalc.shtml
www.ispreview.ru/ipcalc.html


[AVP] Присоединенные файлы (вирусов нет):

 LeXa2
02 Сентябрь 2007, 17:24 | #66 
Пособие из разряда "как можно извратиться при работе с ipv4 адресами вместо использования обычных логических операций".

Инверсная сиськина маска - она нужна только тогда, когда сиськи же и программишь. В IPCalc оно нафиг не надо.
Получают инверсную маску обычным NOT-ом над 32-битным представлением простой маски (хотя никто не мешает сделать NOT над каждым октетом маски, один фиг).

Адрес броадкаста - штука жестко в стандартах не прописанная. Для него используется как максимальный адрес диапазона, так и адрес самой сети - это зависит чисто от пожеланий админа при настройке сетевого интерфейса.

Вот пример типичной работы с сетевыми адресами на PHP:

<?php

$ip = array(1 => 192, 2 => 168, 3 => 1, 4 => 2);
$mask = array(1 => 255, 2 => 255, 3 => 255, 4 => 0);

$ipl32 = ($ip[1] << 24) + ($ip[2] << 16) + ($ip[3] << 8) + $ip[4];
$maskl32 = ($mask[1] << 24) + ($mask[2] << 16) + ($mask[3] << 8) + $mask[4];

$netl32 = $ipl32 & $maskl32;

$net[1] = ($netl32 >> 24) & 255;
$net[2] = ($netl32 >> 16) & 255;
$net[3] = ($netl32 >> 8) & 255;
$net[4] = $netl32 & 255;

echo("IP: ".$ip[1].".".$ip[2].".".$ip[3].".".$ip[4]."\n");
echo("Mask: ".$mask[1] . ".". $mask[2] . ".". $mask[3] . ".". $mask[4] . "\n");
echo("Calculated Net: ". $net[1] . ".". $net[2] . ".". $net[3] . ".". $net[4] . "\n");

?>

 xpeh
10 Ноябрь 2007, 22:29 | #84 
Кого это колбасит, качает это http://lantricks.ru/lancalculator/ и не парица.

 user
25 Октябрь 2011, 22:04 | #325 
Да нет, нормальный алгоритм...в смысле всё по шагам расписано) мне помогло) спасибо)

 HarpyWar
05 Ноябрь 2011, 12:43 | #326 
Алгоритм то нормальный для понимания как это работает, но я его реализовал на PHP "в лоб" :)
Код от LeXa2 в этом плане лучше.


Есть вопросы по настройке игровых серверов? Добро пожаловать на форум!

Имя: Проверка: = 8625


© 2006—2017, HarpyWar

Любое копирование информации с этого сайта - только со ссылкой на источник.
Это в одинаковой мере распространяется на любую авторскую информацию в интернете.