Thema: IP Range

Einzelnen Beitrag anzeigen

Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#8

Re: IP Range

  Alt 20. Mär 2006, 05:27
Hallo mein Lieber

Hätte nicht gedacht, das auch ich Dir mal weiter helfen kann.

Also zuerst die Integer-Werte wandeln is klar denke ich dann kannst du die CreateIPPool benutzen.

Wichtig zu wissen: Die CreateIPPool war die Beste von 3 Versuchen mit dem besten zeitlichen Ergebenissen. Von ?.0.0.0 ?.50.255.255 benötigt sie ca 3-4 sek. Je nach CPU. Die anderen Versuche kommen dabei immer so um die 10-15 Sek weg. Villeicht bekommst Du sie ja noch schneller .
In dem Fall lass von Dir hören.

Delphi-Quellcode:
type
  PIp = record
    p1 : String;
    P2 : String;
    p3 : String;
    p4 : String;
    end;

type
 MyIP = packed record
  case Byte of
    0: (D,C,B,A : Byte);
    1: (dwValue : DWord);
  end;

function SplittIP(IP: string): PIp;
var
  I: Integer;
begin
  Result.p1 := '';
  Result.p2 := '';
  Result.p3 := '';
  Result.p4 := '';

  I := 0;
  repeat
    Inc(I, 1);
    if IP[I] <> '.then
      Result.p1 := Result.p1+IP[I];
  until
     IP[I] = '.';

  repeat
    Inc(I, 1);
    if IP[I] <> '.then
      Result.p2 := Result.p2+IP[I];
  until
     IP[I] = '.';

  repeat
    Inc(I, 1);
    if IP[I] <> '.then
      Result.p3 := Result.p3+IP[I];
  until
     IP[I] = '.';

  repeat
    Inc(I, 1);
    if IP[I] <> '.then
      Result.p4 := Result.p4+IP[I];
  until
     I = Length(IP);
end;

function CreateIPPool(sStartIp, sEndIp: String): TStringList;
var
 FromIP, ToIP, IP: MyIP;
 I: Integer;
 Adress: PIp;
begin
  Result := TStringList.Create;
  Adress := SplittIP(sStartIp);
  with FromIP do begin
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  Adress := SplittIP(sEndIp);
  with ToIP do begin
    A := StrToInt(Adress.p1);
    B := StrToInt(Adress.p2);
    C := StrToInt(Adress.p3);
    D := StrToInt(Adress.p4);
    end;

  for I := FromIP.dwValue to ToIP.dwValue do begin
    IP.dwValue := I;
    with IP do
      Result.Add(Format('%d.%d.%d.%d',[A,B,C,D]));
    end;
end;
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat