Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   IPv4-Adresse auf Gültigkeit prüfen (https://www.delphipraxis.net/145891-ipv4-adresse-auf-gueltigkeit-pruefen.html)

fkerber 10. Jan 2010 10:37


IPv4-Adresse auf Gültigkeit prüfen
 
himitsu stellt hier eine Funktion vor, mit der man eine IPv4-Adresse auf Gültigkeit überprüfen kann. Diese wurde von alzaimar leicht korrigiert und optimiert.

Delphi-Quellcode:
//Array als Lookup-Tabelle für gültige Ziffern.
var
  IsDigit : Array [Char] Of Boolean;

//Hilfsfunktion
//Muss einmal vor Aufruf von isIP aufgerufen werden, um eine LookUp-Tabelle zu erstellen.
procedure InitIsDigit;
var
  C : char;
begin
  For C:= #0 to #255 do IsDigit[C] := C in ['0'..'9'];
end;
Delphi-Quellcode:
function isIpv4(const aIpString: string): Boolean;
var
  pIpString: PChar;
  OctetSum, Octet, OctetLength, OctetCount: Integer;

begin
  Result := False;
  pIpString := PChar(aIpString);
  OctetCount := 0;
  OctetSum := 0;
  while pIpString^ <> #0 do
  begin
    Inc(OctetCount);
    Octet := 0;
    OctetLength := 0;
    while IsDigit[pIpString^] do
    begin
      Octet := Octet * 10 + (Ord(pIpString^) - Ord('0'));
      Inc(OctetLength);
      Inc(pIpString);
    end;
    inc(OctetSum, Octet);
    if (OctetLength = 0) or (Octet > 255) then
      Exit;
    if OctetCount = 4 then
      Break;
    if pIpString^ <> '.' then
      Exit;
    Inc(pIpString);
  end;
  Result := (OctetSum > 0) and (OctetCount = 4) and (pIpString^ = #0);
end;

Valle 10. Jan 2010 10:54

Re: IP-Adresse auf Gültigkeit prüfen
 
Das ist aber nicht sehr IPv6 freundlich! Also ich würde auf jeden Fall noch dran schreiben, dass dies nur für IPv4 gilt.

Dann habe ich beim lesen des Codes noch eine Frage, bei der ich mir nicht sicher bin. Meine Delphi-Zeiten habe ich bereits einige Jahre hinter mir. Der Code in der Zeile 23 prüft doch, ob sich eine der Zahlen aus den 4 Zahlengruppen einer IPv4 gleich 0 oder größer 255 ist? Wenn das so ist, dann ist das falsch. Eine IP kann auch eine 0 haben. Nur nicht am Anfang und am Ende der IP. Das sind dann besondere IPs. Edit:// Okay, hier habe ich mich vertan. Es wurde ja OctetLength auf 0 geprüft, das macht natürlich Sinn.

Auch ist zu berücksichtigen, dass die Funktion wirklich nur auf eine gültige Notation prüft. Hier sind immernoch Kombinationen möglich, die nicht immer sinnvoll sind. Die Broadcast-Adresse "255.255.255.255" ist zum Beispiel keine IP, die man in manchen Szenarien sinnvoll einsetzen könnte.

Hoffe ich hab hier nicht alles in Delphi misinterpretiert... :angel2:

Liebe Grüße,
Valle

himitsu 10. Jan 2010 11:11

Re: IP-Adresse auf Gültigkeit prüfen
 
bei IPv6 konnten auch Zahlen weggelassen werden, aber ich hab noch nirgends gesehn, daß man dieses auchbei IPv4 darf?

PS:
@ überschneller fkerber: vielleicht hätte man besser nur den anderen Thread hier herverschoben, um keine doppelte Diskussion einzuführen?

fkerber 10. Jan 2010 11:46

Re: IP-Adresse auf Gültigkeit prüfen
 
Hi!

Stimmt, dass es nur für IPv4 ist, werde ich noch ergänzen.

@himitsu:
Ich hatte ehrlich gesagt nicht damit gerechnet, dass da noch mehr nachkommt.
Aber ich werde beide Threads im Auge halten und das dann mergen, wenn in dem anderen Ruhe eingekehrt ist.


Grüße, Frederic

himitsu 10. Jan 2010 11:51

Re: IP-Adresse auf Gültigkeit prüfen
 
Zitat:

Zitat von fkerber
Ich hatte ehrlich gesagt nicht damit gerechnet, dass da noch mehr nachkommt.

einmal wartest du mehrere Jahre und nun wolltest du das wohl aufholen und hast 'ne ganze Minute gewartet :lol:

Valle 10. Jan 2010 11:54

Re: IP-Adresse auf Gültigkeit prüfen
 
Zitat:

Zitat von himitsu
bei IPv6 konnten auch Zahlen weggelassen werden, aber ich hab noch nirgends gesehn, daß man dieses auchbei IPv4 darf?

Kann man auch nicht - das meinte ich aber auch nicht. :zwinker:

Ich meinte vorallem, dass bereits aus dem Namen der Funktion ersichtlich sein sollte, dass diese Funktion IPs nur auf gültige IPv4-IPs prüft. Und ich denke mittlerweile ist es längst Zeit geworden, bereits auf IPv6-Kompatibilität umzustellen. Ich würde euch gerne die Funktion für v6 basteln, aber in Delphi sieht die Sache schlecht aus. :?

Liebe Grüße,
Valle

fkerber 10. Jan 2010 12:02

Re: IP-Adresse auf Gültigkeit prüfen
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von fkerber
Ich hatte ehrlich gesagt nicht damit gerechnet, dass da noch mehr nachkommt.

einmal wartest du mehrere Jahre und nun wolltest du das wohl aufholen und hast 'ne ganze Minute gewartet :lol:

Nein, nein - so ist das ja nicht.
Die Sachen kommen immer schnell in die Vorschlagssparte und dann dauert es Jahre :D
Scherz beiseite, wir bemühen uns, die ganzen Sachen so bald als möglich aufzuarbeiten und demnach auch keine neuen Sachen ewig auf die lange Bank zu schieben.

himitsu 10. Jan 2010 12:04

Re: IP-Adresse auf Gültigkeit prüfen
 
Zitat:

Zitat von Valle
Ich würde euch gerne die Funktion für v6 basteln, aber in Delphi sieht die Sache schlecht aus. :?

kannst es auch gern in 'ner anderen Sprache machen und wir versuchen es dann zu übersetzen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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