Изучение диапазонов IP-адресов в TypeScript: удобное руководство по обработке диапазонов IP-адресов в вашем коде

Работа с диапазонами IP-адресов может быть общим требованием во многих приложениях, особенно когда речь идет о сетевых задачах или мерах безопасности. В этой статье мы углубимся в TypeScript и рассмотрим различные методы работы с диапазонами IP-адресов. Если вам нужно проверить IP-адреса, проверить совпадения или выполнить другие операции, мы предоставим вам практические примеры кода и простые для понимания объяснения.

Понимание IP-адресов и диапазонов.
Прежде чем мы углубимся в методы, давайте быстро вспомним, что такое IP-адреса и диапазоны. IP-адрес — это уникальный идентификатор, присваиваемый каждому устройству, подключенному к сети. Он состоит из четырех числовых значений, разделенных точками (например, 192.168.1.1). С другой стороны, диапазон IP-адресов представляет собой непрерывную последовательность IP-адресов, обычно обозначаемую начальным и конечным IP-адресом.

Метод 1. Проверка IP-адреса.
При работе с диапазонами IP-адресов крайне важно убедиться, что предоставленные IP-адреса действительны. Вот функция TypeScript, которая проверяет IP-адрес с помощью регулярного выражения:

function isValidIP(ip: string): boolean {
  const ipRegex = /^([0-9]{1,3}\.){3}[0-9]{1,3}$/;
  return ipRegex.test(ip);
}

Метод 2. Проверка совпадений.
Чтобы определить, пересекаются ли два диапазона IP-адресов, мы можем сравнить их начальный и конечный адреса. Вот функция TypeScript, которая проверяет перекрытие:

function doRangesOverlap(range1: [string, string], range2: [string, string]): boolean {
  const start1 = ipToNumber(range1[0]);
  const end1 = ipToNumber(range1[1]);
  const start2 = ipToNumber(range2[0]);
  const end2 = ipToNumber(range2[1]);

  return (start1 <= end2 && end1 >= start2);
}
function ipToNumber(ip: string): number {
  return ip.split('.').reduce((result, octet) => (result << 8) + parseInt(octet, 10), 0);
}

Метод 3: создание диапазона IP-адресов на основе нотации CIDR:
Нотация CIDR (бесклассовая междоменная маршрутизация) — это компактное представление диапазона IP-адресов. Вот функция TypeScript, которая преобразует нотацию CIDR в диапазон IP-адресов:

function cidrToRange(cidr: string): [string, string] {
  const [ip, prefix] = cidr.split('/');
  const prefixLength = parseInt(prefix, 10);
  const ipAsNumber = ipToNumber(ip);
  const rangeSize = Math.pow(2, 32 - prefixLength);
  const start = ipAsNumber & ((rangeSize - 1) << (32 - prefixLength));
  const end = start + rangeSize - 1;
  return [numberToIp(start), numberToIp(end)];
}
function numberToIp(number: number): string {
  return [(number >>> 24) & 255, (number >>> 16) & 255, (number >>> 8) & 255, number & 255].join('.');
}

Метод 4. Проверка того, находится ли IP-адрес в пределах диапазона:
Чтобы определить, попадает ли IP-адрес в заданный диапазон, мы можем сравнить его числовое представление с числовыми представлениями начального и конечного адресов диапазона. Вот функция TypeScript, которая выполняет эту проверку:

function isIPInRange(ip: string, range: [string, string]): boolean {
  const ipNumber = ipToNumber(ip);
  const start = ipToNumber(range[0]);
  const end = ipToNumber(range[1]);
  return ipNumber >= start && ipNumber <= end;
}

В этой статье мы рассмотрели различные методы обработки диапазонов IP-адресов в TypeScript. От проверки IP-адресов до проверки на перекрытие и преобразования нотации CIDR — эти методы помогут вам эффективно работать с диапазонами IP-адресов в вашем коде. Используя эти методы, вы можете повысить функциональность и безопасность своих приложений.