Записать диапазоны в массив и сравнить с текущим Ip

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 29 май 2010.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Уважаемые форумчане, помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны IP и сравнить их с IP присоединяющегося. Файл *.cfg с таким содержимым:
    3
    127.0.0.0
    127.0.0.255
    128.0.0.0
    128.0.0.255
    129.0.0.0
    129.0.0.255

    При чтении командой ReadLn, в первой строке глубина цикла, от 1 до этого значения. Затем, в цикле подряд два оператора чтения ReadLn, первый сохраняет в запись ячейки "От", второй в запись "По". Сам массив от 1 до значения, что считано с первой строки файла.
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Код (Delphi):
    uses
    WinSock;
    Функции
    Код (Delphi):
    // Преобразует строковый IP в LongInt
    function inet_addr(cp: PChar): u_long; stdcall;

    //преобразует IP кодиованный в LongInt к строке вида XXX.XXX.XXX.XXX
    function inet_ntoa(inaddr: TInAddr): PChar; stdcall;
    // Используем так:
    var
    s: PChar;
    cIp: Integer; // кодированный IP
    begin
    ...
    s := inet_ntoa(@cIp);
    ...
    end;
    следующий код поможет Вам построить массив в указанном диапазоне подсети
    Код (Delphi):
    uses
    WinSock;
    ...
    type
    TSubNetArray = array of Integer;

    ...

    function GetIPSubNet(SubNet: string; IPFtom,IPTo: Integer): TSubNetArray;
    var
    i: Integer;
    s: string;
    begin
    for i := IPFtom to IpTo do
    begin
    s := SubNet + '.' + IntToStr(i);
    SetLength(Result,Length(Result)+1);
    Result[High(Result)] := inet_Addr(PChar(s));
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    IPSubNet: TSubNetArray;
    begin
    IPSubNet := GetIPSubNet('127.0.0',1,255);
    ...
    end;
    Ну а дальше... "напильником"... :please:
     
Загрузка...

Поделиться этой страницей