September 20, 2023

PascalАВС.NЕТ: калькулятор сетей TCP/IP в библиотеке School

Назначение и основные возможности

Калькулятор сетей доступен в PascalАВС.NЕТ версии не ниже 3.9.0.3360 от 21.09.2023. Он дает возможность в наглядном виде получить основную информацию о подсетях TCP/IP, задав адрес сети и маску подсети.

Реализация

Калькулятор реализован на базе двух классов.

Класс с именем Addr32 позволяет создавать объекты, моделирующие 32-битные сетевые адреса IPv4 и маски. Пользователю доступны три свойства адреса: value (десятичный адрес в формате с октетами, например, 15.218.42.12), value2 (адрес в виде беззнакового двоичного числа длиной 32 бита) и value10 (адрес, переведенный из двоичной системы счисления в десятичную). Для объектов этого класса перегружены побитовые логические операции and, or, not, а также операция + для сложения адреса с целочисленным значением (инкремент). Это дает простоту и удобство при работе с масками.

Другой класс с именем CalcIP - это сам калькулятор на основе заданного сетевого адреса и маски. Маску можно задавать в формате десятичного адреса, префикса или непосредственно в виде 32-битной строки. У калькулятора девять свойств и их имена перечислены в круглых скобках на приведенном выше рисунке. Свойство Bitmask имеет тип byte, свойство Hosts - тип integer, а остальные семь являются объектами класса Addr32. Таким образом, если создать калькулятор с именем MyCalc, двоичный адрес первого хоста в коде программы будет доступен под именем MyCalc.Hostmin.value2.

Что еще можно получить с помощью калькулятора

Создав объект класса Addr32 на основе того или иного формата адреса, можно получить отображение этого адреса. Перегруженный метод .ToString позволяет сформировать строку, содержащую адрес в удобном для восприятия виде. Например, оператор Print(new Addr32('34.118.53.125')); выведет:
34.118.53.125, 00100010.01110110.00110101.01111101

Метод калькулятора GenAddr - генератор адресов хостов. Он возвращает последовательность адресов в виде объектов класса Addr32.

Еще один генератор, GenAddrBin, возвращает последовательность двоичных 32-битных адресов - это удобно для операций с битовой маской. Поскольку 32-битное отображение - это строка, применение к нему регулярных выражений открывает широчайшие возможности.

Примеры использования калькулятора

1. Вот так можно получить сетевую информацию, задав ip-адрес и маску.

2. Решение варианта задания 13 с сайта К. Полякова.

(№ 6842) (К. Багдасарян) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 158.132.161.128 и маской сети 255.255.255.128.
Сколько в этой сети IP-адресов, которые в двоичной записи IP-адреса оканчиваются единицей?
В ответе укажите только число.

## uses School;

var x := new CalcIP('58.132.161.128', '255.255.255.128');
x.GenAddrBin.Count(addr -> addr[^1] = '1').Println;     // 64

Что дальше?

Следующий материал на эту тему будет посвящен деталям работы с калькулятором сетей TCP/IP.