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

Shouldercannon

Well-Known Member
25.05.2010
128
0
29
Пенза
#1
Уважаемые форумчане, помогите пожалуйста реализовать следующее. Задача заключается в том, чтобы загрузить из файла диапазоны 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 до значения, что считано с первой строки файла.
 

sinkopa

Well-Known Member
#2
Код:
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: