ОБСУЖДЕНИЕ

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

1 ответов 5,3 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор темы
Уважаемые форумчане, помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны 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 до значения, что считано с первой строки файла.
 
Код:
uses
WinSock;

Функции
Код:
// Преобразует строковый 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;

следующий код поможет Вам построить массив в указанном диапазоне подсети
Код:
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: