Яку задачу це закриває
Списки адрес приходять у тому вигляді, який здався зручним тому, хто їх видав. Фаєрвол вивантажує префікси, тікет-система вставляє діапазони через дефіс, колега надсилає колонку з таблиці, а лог дає адреси, закопані в рядки тексту. У кінці цього всього треба написати правило, а правило хоче блоки CIDR — і якнайменше, бо кожен зайвий рядок це ще один предмет для перевірки й ще один запис у таблиці, у якої є межа розміру.
Тому сторінка робить три речі по черзі. Знаходить усі адреси, діапазони й префікси в тому, що ви вставили, не звертаючи уваги на текст навколо. Зливає все, що перетинається або стикається. Далі розкладає результат назад у найменший набір блоків CIDR, який покриває рівно ті самі адреси — не більше і, що важливіше, не менше.
Що саме розпізнається
- Окремі адреси:
192.0.2.7,2001:db8::1 - Префікси:
10.0.0.0/8,2001:db8::/48 - Діапазони через дефіс:
10.0.1.0 - 10.0.1.255 - Будь-що з переліченого всередині іншого тексту — рядки лога, JSON, вивід
iptables -L, стіна HTML. Решта рядка просто пропускається.
IPv4 та IPv6 обробляються разом, але рахуються окремо: зливати їх між собою безглуздо — це різні адресні простори, які випадково записані на одній сторінці.
Префікс перед усім іншим нормалізується до власної межі. Якщо вставити
192.168.1.50/26 — тобто адресу всередині блока, а не сам блок, — вона читається як
192.168.1.0/26: це та мережа, якій адреса насправді належить, і майже напевно те, що
малося на увазі.
Чому «злиття» стосується й блоків, що просто стикаються
Блоки, які перетинаються, очевидно зводяться в один. Менш очевидно, що так само зводяться
сусідні: 10.0.0.0/25 і 10.0.0.128/25 — це рівно дві половини
10.0.0.0/24, і повернути їх двома рядками там, де один рядок каже те саме, було б
гіршою відповіддю, а не чеснішою. Тому злиття обʼєднує діапазони, коли наступний починається
щонайбільше через одну адресу після кінця попереднього.
Саме цей крок робить основну роботу на справжніх даних. Вивантаження фаєрволів і списки зловживань повні блоків, доданих у різний час різними людьми, які разом узяті є просто одним більшим блоком.
Що означає «найменший набір» і чому він точний
Перетворення довільного діапазону в блоки CIDR — не питання смаку. Для заданого діапазону існує рівно один мінімальний набір префіксів, який покриває його точно, і знаходиться він механічно: від поточного початку беремо найбільший блок, який одночасно вирівняний по цьому початку і вміщується в залишок, виводимо його, зсуваємо початок за нього, повторюємо.
Дивує саме вирівнювання. /24 може починатися лише з числа, кратного 256, тож
діапазон 10.0.0.5 - 10.0.1.20 не стає одним чи двома круглими блоками — він стає
драбинкою дрібних префіксів на початку, великим блоком посередині й ще однією драбинкою в кінці. Це
не інструмент шкодить: це і є той діапазон. Якщо драбинка небажана, лікується вона вибором меж
діапазону на межах степенів двійки.
Чому воно не гальмує на великих даних
Очевидна реалізація — розгорнути кожен діапазон у список адрес, відсортувати, прибрати дублі,
згрупувати назад — чудово працює на двадцяти адресах і намертво вішає вкладку на
10.0.0.0/8, а це шістнадцять мільйонів адрес. Один /16 в IPv6 був би гірший
за все, що взагалі здатен порахувати компʼютер.
Тут адреси не перебираються ніколи. Кожен запис стає інтервалом — парою дуже великих цілих
чисел, — і злиття та розкладання працюють з інтервалами. Вартість залежить від кількості
записів, які ви вставили, а не від кількості адрес, які вони описують: саме тому
0.0.0.0/0 і один вузол коштують однаково.
Дві стелі все ж лишаються, і вони захищають вкладку: обмеження на кількість прочитаних із тексту записів і на кількість надрукованих префіксів. Якщо котрась спрацювала, сторінка каже про це числами, а не мовчки віддає коротшу відповідь. Обрізаний список, який має вигляд повного, — єдиний по-справжньому небезпечний спосіб зламатися для такого інструмента: людина забере його й напише правило з діркою.
Ця сторінка — та, яку найбільше хочеться тримати у вашому браузері
З усього, що є на сайті, саме сюди вставляють найчутливіше: сирі рядки лога, конфігурацію фаєрвола, внутрішні плани адресації. Такий матеріал описує нутрощі мережі, і він не має залишати машину лише тому, що комусь треба було впорядкувати список.
Тому тут немає ані форми, що надсилається, ані запиту у фоні, ані сліду від того, що ви вставили: уся робота — це JavaScript у вашій вкладці. Відкрийте сторінку, відʼєднайте мережу — вона працюватиме далі; це найпростіший спосіб підтвердити сказане, не вірячи на слово.