![]() |
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. |
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! |
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! |
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! |
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
![]() |
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? |
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? |
Re: IP-Adressen höchzählen
Kombinieren wie ueblich. Schema xxx.yyy.zzz.aaa
|
Re: IP-Adressen höchzählen
Noch eine Frage.
Ich nehm jetzt diesen Code
Delphi-Quellcode:
Wenn ich nun einen wert größer 255 eingebe wird das Letzte zeichen gelöscht!
if (ipstart1.Text > '255') then
begin mystring := ipstart1.Text; Delete(mystring,3,1); ipstart1.text := mystring; end Allerdings ist der Cursor dann auf dem ERSTEN Zeichen. Wie setze ich den auf das dritte? |
Re: IP-Adressen höchzählen
Delphi-Quellcode:
sollte gehen
SendMessage(editx.Handle, EM_SETSEL, 2, 2)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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