Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Циклы по диапазону IP-адресов в FreePascal

Delphi , Синтаксис , Циклы

При работе с сетью часто возникает необходимость пройтись по диапазону IP-адресов. В этом материале мы рассмотрим, как это можно сделать в FreePascal.

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

Пример кода на Object Pascal (Delphi), который демонстрирует, как это можно сделать:

type
  TIPAddress = array[0..3] of Byte;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  I: Integer;
  IPAddress: TIPAddress absolute I;
begin
  // цикл по диапазону IP-адресов от 127.0.0.1 до 127.0.1.245
  for I := 2130706433 to 2130706933 do
  begin
    // преобразование целого числа в массив байтов
    IPAddress := I;
    // построение строки IP-адреса из массива байтов
    S := IntToStr(IPAddress[3]) + '.' + IntToStr(IPAddress[2]) + '.' +
      IntToStr(IPAddress[1]) + '.' + IntToStr(IPAddress[0]);
    // дальнейшая обработка строки IP-адреса
    // ...
  end;
end;

Также можно использовать битовый сдвиг, но это требует больше усилий:

type
  TIPAddress = array[0..3] of Byte;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  I: Integer;
  IPAddress: TIPAddress;
begin
  // цикл по диапазону IP-адресов от 127.0.0.1 до 127.0.1.245
  for I := 2130706433 to 2130706933 do
  begin
    // заполнение массива байтов путем сдвига битов целого числа
    IPAddress[0] := Byte(I);
    IPAddress[1] := Byte(I shr 8);
    IPAddress[2] := Byte(I shr 16);
    IPAddress[3] := Byte(I shr 24);
    // построение строки IP-адреса из массива байтов
    S := IntToStr(IPAddress[3]) + '.' + IntToStr(IPAddress[2]) + '.' +
      IntToStr(IPAddress[1]) + '.' + IntToStr(IPAddress[0]);
    // дальнейшая обработка строки IP-адреса
    // ...
  end;
end;

Также можно использовать модуль sockets, который предоставляет функцию HostAddrToStr, которая преобразует IP-адрес в строку:

{$mode Delphi}

uses
  sockets;

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  I: Integer;
  IPAddress: in_addr;
begin
  // цикл по диапазону IP-адресов от 127.0.0.1 до 127.0.1.245
  for I := 2130706433 to 2130706933 do
  begin
    // преобразование целого числа в IP-адрес
    IPAddress.s_addr := I;
    // построение строки IP-адреса с помощью функции HostAddrToStr
    S := HostAddrToStr(IPAddress);
    // дальнейшая обработка строки IP-адреса
    // ...
  end;
end;

В заключение стоит отметить, что при работе с IPv6 адресами может потребоваться другой подход, так как они представляют собой 128-битные числа, разделенные на 8 блоков по 16 бит.

Создано по материалам из источника по ссылке.

Материал описывает, как пройтись по диапазону IP-адресов в FreePascal, представленных как 32-битные числа, разделив их на 4 байта.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Циклы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:04:25/0.0030558109283447/0