Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ip auf gültigkeit prüfen (https://www.delphipraxis.net/143327-ip-auf-gueltigkeit-pruefen.html)

BBoy 13. Nov 2009 12:02


ip auf gültigkeit prüfen
 
Hallo,
ich suche eine Möglichkeit um eine in ein textfeld eingegebe IP auf gültigkeit zu prüfen, also ob die schreibweise korrekt ist.

Bernhard Geyer 13. Nov 2009 12:05

Re: ip auf gültigkeit prüfen
 
Per RegExkomponente (z.B. vom LMD/ElPack) und der passenden Expression

stho 13. Nov 2009 12:13

Re: ip auf gültigkeit prüfen
 
es gibt doch auch von den indys eine Komponente die als IP-Maske dient :thumb:

:!: JvIpAdress :!:

Viel Spaß damit ;-)

sirius 13. Nov 2009 12:13

Re: ip auf gültigkeit prüfen
 
Delphi-Quellcode:
uses Winsock;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if inet_addr(PChar(edit1.Text))=INAddr_None then
    raise Exception.CreateFMT('%s ist keine gültige IP-Adresse',[edit1.text]);
end;
Edit:
"255.255.255.255" müsste man bei dieser Version noch extra überprüfen.
Beachte das auch "4" oder "4.6" eine gültige Adresse ist.

Sir Rufo 13. Nov 2009 12:26

Re: ip auf gültigkeit prüfen
 
Zitat:

Zitat von stho
es gibt doch auch von den indys eine Komponente die als IP-Maske dient :thumb:

:!: JvIpAdress :!:

Viel Spaß damit ;-)

Indy's :gruebel: da fangen die Klassen doch alle mit Id... an
Jv... ist doch wohl eher Jedi's Work :mrgreen:

uoeb7gp 13. Nov 2009 12:32

Re: ip auf gültigkeit prüfen
 
Hi, hab für Produktiv Systeme seit Jahren folgendes in Verwendung:

Delphi-Quellcode:
function TMainClass.CheckIPEx(s: string): Boolean;
var
  s1, s2, s3, s4: String;
  e, v, i, j, sum: Integer;
  bcLen: integer;
  ix: array[1..3] of integer;
begin
  result := false;

  if (s = '0.0.0.0') then EXIT;

  j := 0;
  bcLen := Length(s);
  for i:= 1 to bcLen do begin
      if s[i] = '.' then begin
         inc(j);
         ix[j] := i;
      end;
  end;
  if j <> 3 then EXIT;

  s1 := copy(s, 1, ix[1] - 1);
  s2 := copy(s, ix[1] + 1, ix[2] - ix[1] - 1);
  s3 := copy(s, ix[2] + 1, ix[3] - ix[2] - 1);
  s4 := copy(s, ix[3] + 1, bcLen);

  sum := 0;

  Val(s1, v, e);
  if (e <> 0) or (v > 255) or (v < 0) or ((Length(s1) > 1) and (s1[1] = '0')) then EXIT;
  sum := sum + v;

  Val(s2, v, e);
  if (e <> 0) or (v > 255) or (v < 0) or ((Length(s2) > 1) and (s2[1] = '0')) then EXIT;
  sum := sum + v;


  Val(s3, v, e);
  if (e <> 0) or (v > 255) or (v < 0) or ((Length(s3) > 1) and (s3[1] = '0')) then EXIT;
  sum := sum + v;


  Val(s4, v, e);
  if (e <> 0) or (v > 255) or (v < 0) or ((Length(s4) > 1) and (s4[1] = '0')) then EXIT;
  sum := sum + v;

  if sum <> 0 then
    result := true;
end;

sirius 13. Nov 2009 12:38

Re: ip auf gültigkeit prüfen
 
Oder ausführlich:
Delphi-Quellcode:
function isIP(const IP:AnsiString):boolean;
var RtlIpv4StringToAddress:function(s:PAnsiChar; //IP-Adresse
                                    Strict:Boolean; //zwingend 4 Teile durch Punkte getrennte Addresse
                                    out Terminator:PAnsiChar;
                                    out Addr:In_Addr):LongWord;stdcall;
var Terminator:PAnsiChar;
    Addr:In_Addr;
begin
  RtlIpv4StringToAddress:=GetProcAddress(GetModuleHandle('NTDll.DLL'),
                                         'RtlIpv4StringToAddressA');
  if assigned(RtlIpv4StringToAddress) then //sollte auf allen neueren WinVersionen verfügbar sein
    result:=RtlIpv4StringToAddress(PAnsiChar(IP),true,Terminator,Addr)
           =NO_ERROR
  else //falls das Windows zu alt ist
    result:=(inet_addr(PAnsiChar(IP))<>INAddr_None)
          or(IP='255.255.255.255');
end;

BBoy 13. Nov 2009 12:56

Re: ip auf gültigkeit prüfen
 
Super, danke für die vielen Antworten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz