Thema: Delphi IPs aufteilen

Einzelnen Beitrag anzeigen

Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:49
Hi,

ich glaub, ich versteh nu, was Du meinst

Delphi-Quellcode:
var
  IP : Longword; // IP -> Longword deshalb, weil 32-bittig
begin
  // Initialisieren
  IP := 0;
  // IP-Adresse aus den 4 Bytes zusammensetzen
  IP := Byte(IP_Block_1) SHL 24 + // 1. Block mit 8 Bit Länge um 24 Bit nach links verschieben
        Byte(IP_Block_2) SHL 16 + // 2. Block mit 8 Bit Länge um 16 Bit nach links verschieben
        Byte(IP_Block_3) SHL 8 + // 3. Block mit 8 Bit Länge um 8 Bit nach links verschieben
        Byte(IP_Block_4); // 4. Block mit 8 Bit Länge bleibt "ganz hinten" stehen
end;
Wie IP-Adressen aufgebaut sind etc. scheint ja klar zu sein, darum nur dieser kurze Code.
Um die IP-Adresse aus den einzelnen Blöcken zusammensetzen zu können, brauchen wir eine 32-bittige Variable (hier "ip").
IP_Block_1 bis IP_Block_4 sind die 4 Blöcke, die definitionsgemäß Werte von 0 bis 255 annehmen können, da sie ja einzelne Bytes repräsentieren. Ich habe nochmal einen Typecast nach Byte dazugeschrieben, wenn IP_Block_x schon vom Typ Byte ist, kann das natürlich wegfallen.
Mittels Delphi-Referenz durchsuchenSHL werden die Bytes nun an ihre "Position" innerhalb der 32-Bit-IP verschoben.

Ich hoffe, das hilft Dir etwas weiter


Edit: Die Netzmaskenangabe, z.B. /24 wird nicht umgewandelt. Die Zahl gibt ja nur an, wie viele Bits der Adresse der Netzadresse angehören. Das heißt, für /24 besteht die Netzmaske aus 24x "1" und die restlichen 8 Bit sind "0":
Code:
11111111 11111111 11111111 00000000
Die entsprechende Zahl kannst Du Dir in einer Schleife zusammenbasteln:
Delphi-Quellcode:
// NetzAnteil wäre z.B. 24
// Initialisieren
Maske := 0;
// 32 Bit
FOR Stelle := 1 TO 32 DO
  // Im "Netzbereich" der Adresse?
  IF Stelle > 32-NetzAnteil THEN
    // Maske zusammensetzen
    Maske := Maske + (1 SHL Stelle);
Um die Netzadresse zu erhalten, einfach IP-Adresse und Netzmaske AND-verknüpfen, d.h. wenn Du IP und Maske z.B. als Longword vorliegen hast, reicht schon:
Netzadresse := IP AND Maske; Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat