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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#1

IPs aufteilen

  Alt 6. Jun 2005, 13:53
Guten Tag, Delphi Praxis!
Mein 1. Post und zwar, weil ich schnelle Hilfe brauche:

Ich soll ein Delphi 7 Programm schreiben, welches IP-Adressen zeilenweiße einließt und dadurch die Netzmaske, Netzadresse & Broadcast-Adresse bestimmt (IPs sind nach dem dotted Notation & mit angehängtem "/24" für die Netzmaske).

So gut - schon beim ersten großem Ding mein Problem:
Nach dem Einlesen einer IP(+dem Anhängsel) würde ich nun die IP aufteilen in 5 Blöcke, umwandeln in Binär, errechnen der anderen Adressen, zurückkonvertieren in normale IP-Adressen und dann ausgeben.

Wie muss ich eine IP-Adresse aufteilen?
Ich hab n bissl rumprobiert, aber nichts gefunden/gebracht.


Würde mich sehr über Hilfreiche Antworten freuen - thx im vorraus.
Henning
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

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

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:15
Hi,

möchtest Du (allgemein) wissen, wie eine IP-Adresse aufgebaut ist und wie man anhand der Adresse + Netzmasken-Angabe die gesuchten Informationen bestimmt?
Oder möchtest Du wissen, wie die 4 Bytes (in Delphi) zu einer 32-Bit-IPv4-Adresse umgerechnet werden?
Oder willst Du was ganz anderes?

Gruß
Stephan

edit: Herzlich willkommen in der Delphi-PRAXiS!
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
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#3

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:26
Hiho (;

Nein, nein - wie eine IP-Adresse aufgebaut ist & man die zugehörigen Netzmasken usw. bestimmt, weiß ich.
Es geht darum, wie ich nun an die einzelnen "Blöcke" der IP Adresse rankomme (eben um Netzteil & Hostteil zuverändern).

Ich hab mir gedacht, ich teil die ganzen Kram auf; in 5 gleich große Blöcke aus String, die dann jeweils einen Block repräsentieren. Wie ich's mir gedacht hab, hat nicht funktioniert.
Deswegen bin ich mittlerweile schon so weit, dass ich nur noch einen String nehme (ohne . und /), also nur noch die Zahlen - aber mir schmiert das Programm mit Stack Overflow ab.


Irgend ne Idee für nen armen kleinen programmierer? *g*
Henning
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:33
Hai BackOrifice,

eine IP-Adresse hat ja immer das Format:

A.B.C.D

Jeder Block (Oktet) besteht aus 8-Bit. Die Netzadresse ist nur gerade der Teil der IP-Adresse beinen alle BITs der Subnetzmaske 1 sind. Duch eine AND-Verknüpfung bekommst Du die Netzadresse. Uff.. was ein Satz

Beitspiel:

Code:
IP         : 192.168.001.001
SN         : 255.255.255.255

Binär ist das:

IP         : 11000000.10101000.00000001.00000001
AND
SN         : 11111111.11111111.11111111.00000000
Netzadresse : 11000000.10101000.00000001.00000000

              192     . 168    . 1      . 0
Die Subnetzmaske wird ja durch die IP-Adresse vorgegeben (wenn ich das Subnetting einmal unberücksichtigt lasse.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#5

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:40
Vielen Dank.. - aber das weiß ich doch schon
Die Information, wie ich Broadcast usw.. bestimme, habe ich. Es geht darum, wie ich das Problem im Quelltext am Besten löse.

Und da gehts jetzt los: Ich muss (zumindest glaube ich das) die IP-Adresse in ihre 4 (+ den 5. für die Netzmaske) Blöcke aufteilen. Diese Blöcke dann schließlich konvertieren in Binär; Operationen zu den Adressen durchführen (wie du schon sagtest mit and/or usw.) und schließlich wieder zurück wandeln in eine normale IPv4 Adresse.

Kurz und knapp gesagt: Ich habe keinen Plan, wie ich an einem Block der IP-Adresse rankomme um dort was verändern zu können.


Hoffe nochmals auf Hilfe
Henning
  Mit Zitat antworten Zitat
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
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:51
Du hast also einen String der so aussieht:

192.168.1.88/24

So, was möchtest Du nun machen?

Du möchtest jedes Oktet in einer eigenen Integer (Byte) Variablen haben!
Du kannst also einfach mit Delphi-Referenz durchsuchenPos und [oh]Copy[/b] den String aufteilen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#8

Re: IPs aufteilen

  Alt 6. Jun 2005, 14:57
Diese Funktion sollte dir helfen, in Kombination mit IntToStr.
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#9

Re: IPs aufteilen

  Alt 6. Jun 2005, 15:25
Ich danke euch dreien. Aber ich glaub, ich raff's irgendwie nicht

Die Idee von Steve, die IP in einem Longword zu speichern, ist sicherlich gut; aber ich habe eben genau diese 4 Blöcke nicht bzw. schaffe es nicht, sie zu erstellen.

Ich habe eine IP im String nach folgendem Muster: 192.168.1.88/24
Und ich schaffe es nicht, diesen String in 4 weitere zu unterteilen, wobei (wie ihr ja schon erkannt habt) jeder Oktav in einem eigenem String oder auch integer sein soll.

Ich kriegs einfach nicht hin -.-

//e: eine Blödheit ist mir schon peinlich
Henning
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#10

Re: IPs aufteilen

  Alt 6. Jun 2005, 15:44
hi,

wie schon erwähnt wurde benötigst du nur die Funktionen Delphi-Referenz durchsuchenpos() bzw. Delphi-Referenz durchsuchenposEx() und Delphi-Referenz durchsuchencopy.
Die FUnktion von Phistev wird dir wohl nicht weiter helfen, da sich das Trennzeichen ändert.
Also ist selber machen angesagt

Delphi-Quellcode:
uses
  StrUtils;
var
  p1,p2,p3,p4: integer;
  block1,block2,block3,block4,block5: string;
  IP: string;
begin
  IP := '123.456.789.123/25';

  p1 := posex('.', IP, 1);
  p2 := posex('.', IP, p1+1);
  p3 := posex('.', IP, p2+1);
  p4 := posex('/', IP, p3+1);

  block1 := copy(IP, 1, p1-1);
  block2 := copy(IP, p1+1, p2-p1-1);
  block3 := copy(IP, p2+1, p3-p2-1);
  block4 := copy(IP, p3+1, p4-p3-1);
  block5 := copy(IP, p4+1, length(IP)-p4);

  showmessage( block1 +#13#10+
               block2 +#13#10+
               block3 +#13#10+
               block4 +#13#10+
               block5 );
end;
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:38 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