Уважаемые форумчане, помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны 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 до значения, что считано с первой строки файла.
Записать диапазоны в массив и сравнить с текущим IP
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Игорь Акопян
- Сообщения: 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])
(A in [a1..a2]) and (B in [b1..b2] and (C in [c1..c2]) and (D in [d1..d2])

-
- Сообщения: 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;