Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IP-Adressen höchzählen (https://www.delphipraxis.net/7067-ip-adressen-hoechzaehlen.html)

josef 31. Jul 2003 19:29


IP-Adressen höchzählen
 
Wie mache ich es am besten das mir alle IP-Adressen zwischen zwei gegebenen in einer Schleife zur ferfügung stehen?
Ich will damit teile von Netzen Pingen.
Wenn ich also z.b. 11.11.10.254 bis 11.11.11.3 habe soll er mir
11.11.10.254
11.11.10.255
11.11.11.1
11.11.11.2
11.11.11.3
ausgeben, aber natürlich soll das (theoretisch) auch von 11.0.0.0 bis 12.0.0.0 gehen.

magicshadow 31. Jul 2003 20:01

Re: IP-Adressen höchzählen
 
Nimm dir einfach ne Caridnal Value, die du hochzählst, dann gilt:
var IP:Cardinal;

Hibyte(Hiword(IP))=Die erste stelle
Lobyte(Hiword(IP))=2. Stelle
HIbyte(loword(IP))=3. Stelle
lobyte(loword(IP))=4. Stelle

gezählt von links nach rechts!

Hoffe du kannst damit was anfangen!

Gast 31. Jul 2003 20:26

Re: IP-Adressen höchzählen
 
Angenommen du hast die Adresse als String, dann nimmst du

inet_addr() um sie in einen ULONG (DWORD) umzuwandeln. Ist der Rueckgabewert = $FFFFFFFF = DWORD(-1) dann ist ein Fehler bei der Umwandlung aufgetreten.

Du hast damit die Adresse in Network Byte Order. Um sie in Host Byte Order zu konvertieren, uebergibst du das Ergebnis an ntohl().

Danach kannst du alle Adressen simpel durchgehen (zB FOR). Um sie in Network Byte Order zu konvertieren nimmst du htonl() und um sie in einen String zu konvertieren nimmst du inet_ntoa() ... als Parameter kannst du das ULONG einfach casten! Der Parameter muss im Network Byte Order erfolgen!

josef 31. Jul 2003 20:54

Re: IP-Adressen höchzählen
 
Danke!
Wie mach ich am Besten ein "DAU-Sicheres" IP eingbefeld?
Also so wie maskEdit mit 999.999.999.999 nur das es nur bis 255 geht?
Es ginge mit 4 Edit nebeneinander und bei änderung prüfen ob der Wert höher als 255 ist, aber ich hätte das gerne mit einem Feld wo der Textcursor weiterspringt!

Chewie 31. Jul 2003 20:58

Re: IP-Adressen höchzählen
 
Ab Win98 gibts sowas als WindowsControl. Wenn dus ohne VCL erzeugen willst, dann such mal im PDSK nach SysIPAddress32, falls nicht, such mal bei Torry nach einer solchen komponente. Da gibts sicher was.

Gast 31. Jul 2003 20:59

Re: IP-Adressen höchzählen
 
Das waere eine Idee. MS hat es beim IP Control auch nicht anders geloest. Du kannst dann aber maximal die Eingabe danach checken .. oder wie willst du einen sinnvollen Livecheck einbauen? Wenn der User mit 3 beginnt und dann ne 1, ist noch alles okay. Kommt dann eine 8, darf deine Kompo aber nicht gleich Alarm schlagen. Stattdessen muss sie auch eine Korrektur mit Backspace erlauben. Ich nehme ein einfaches EDIT. Das ist schoen flexibel und ermoeglicht mit o.g. Funktionen sehr schoen eine Ueberpruefung der IP.

Und dabei kann der Benutzer die Adresse dezimal, oktal, hexadezimal oder gemischt eingeben. Warum das Rad neu erfinden?

josef 31. Jul 2003 21:06

Re: IP-Adressen höchzählen
 
Ok.
Noch ein paar kleine Fragen:
Wie muss ich dann die vier Werte kombinieren zum an inet_addr() übergeben?
Wie sollte ich den Check am besten benutzen?
Ich würde, wenn der wert größer als 255 ist den String nach der zweiten Zahl aufspalten und als wert setzen.
So als würde die zahl mit Backspace gelöscht.
Abfragen beim Buttonclicken mag ich nicht.
Wirkt IMHO Unprofessionell.
Und dann werd ich ein Mask Edit nehmen müssen, oder? Kein edit?

Gast 31. Jul 2003 21:08

Re: IP-Adressen höchzählen
 
Kombinieren wie ueblich. Schema xxx.yyy.zzz.aaa

josef 31. Jul 2003 22:02

Re: IP-Adressen höchzählen
 
Noch eine Frage.
Ich nehm jetzt diesen Code
Delphi-Quellcode:
if (ipstart1.Text > '255') then
begin
mystring := ipstart1.Text;
Delete(mystring,3,1);
ipstart1.text := mystring;
end
Wenn ich nun einen wert größer 255 eingebe wird das Letzte zeichen gelöscht!
Allerdings ist der Cursor dann auf dem ERSTEN Zeichen.
Wie setze ich den auf das dritte?

Gast 31. Jul 2003 22:11

Re: IP-Adressen höchzählen
 
Delphi-Quellcode:
SendMessage(editx.Handle, EM_SETSEL, 2, 2)
sollte gehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.
Seite 1 von 2  1 2      

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