AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IPs aufteilen

Ein Thema von BackOrifice · begonnen am 6. Jun 2005 · letzter Beitrag vom 6. Jun 2005
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz