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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

Уважаемые форумчане, помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны 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 до значения, что считано с первой строки файла.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

навкидку, считать, разложить по октетам - a1.b1.c1.d1 и a2.b2.c2.d2 и проверять условие
(A in [a1..a2]) and (B in [b1..b2] and (C in [c1..c2]) and (D in [d1..d2])
Изображение
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

Код: Выделить всё

Type
  TIPList = packed record
  IP1: String;    // От
  IP2: String;    // По
end;

IPRanges: array[0..255] of TIPList;
RangeFile: TextFile;
i, Range: Byte;
...

// инициализация файла
AssignFile(RangeFile, {путь к файлу});
// открыть для чтения
Reset(RangeFile);

// считывание глубины цикла
ReadLn(RangeFile, Range);

// цикл по числу шаблонов
For i := 1 to Range do
  Begin
    ReadLn(RangeFile, IPRanges[i].IP1);
    ReadLn(RangeFile, IPRanges[i].IP2);
  end;

// закрытие файла
CloseFile(RangeFile);

For i := 1 to Range do
  Begin
    If (NewIP >= IPtoDWORD(IPRanges[i].IP1)) and (NewIP <= IPtoDWORD(IPRanges[i].IP2)) then {пропустить}
    else {закрыть канал}
  end;
Ответить