Laden...

TryParse IP Adresse

Erstellt von Rainer Wein vor 14 Jahren Letzter Beitrag vor 14 Jahren 6.766 Views
R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren
TryParse IP Adresse

Hallo zusammen

ich habe auf einer Form eine MaskedTextBox in die eine IPAdresse
eingegeben wird.
Um zu prüfen ob es eine gültige IP ist, verwende ich folgenden Code:



private bool IsIP(string IP)
        {
            IPAddress ip;
            bool valid = false;
            
            if (string.IsNullOrEmpty(IP))
            {
                valid = false;
            }
            else
            {
                valid = IPAddress.TryParse(IP, out ip);
            }

            return valid;
        }

Wenn ich nun die IP: 192.168.070.078 eingebe, behauptet er das es keine korrekte IP Adresse ist. Was mache ich falsch?

L
416 Beiträge seit 2008
vor 14 Jahren

Mit ein bisschen Probieren wärste da sicher drauf gekommen ...
192.168.070.078 ist keine gültige Ip, 192.168.70.78 hingegen schon.

T
433 Beiträge seit 2006
vor 14 Jahren

IPAddress.TryParse verwendet unter anderem zur Überprüfung der Gültigkeit die Winsock Funktion inet_addr.
Dort steht auch wieso es nicht klappen kann. Er sieht die 078 als oktal an. Da aber 8 ausserhalb von oktal ist kann er diese nicht parsen.

Gruß,
Tom

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren

Danke,

welche Möglichkeiten habe ich im Zusammenspiel zwischen einer TextMaskBox und IPAddress.TryParse(IP, out ip) um eine gültige IP abzufragen?
Ich wollte erst "0" Zeichen mit Replace ersetzen aber das führt natürlich auch zu falschen IP-Adressen (192.168.090.123->192.168.9.123).
Bleibt da nur Regex?

T
433 Beiträge seit 2006
vor 14 Jahren

Es gibt immer mehrere Möglichkeiten für sowas.

Aber ich denke mit Regex kannst du es relativ schnell und elegant lösen, zumal es Ausdrücke zum validieren für IPs wie Sand am Meer geben sollte.

Gruß,
Tom

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren

Validiert werden die IP Adressen ja durch die Methode
private bool IsIP(string IP).
Mir fehlt einfach eine Möglichkeit wie ich aus z.Bsp.:
090 eine 90 mache

M
402 Beiträge seit 2005
vor 14 Jahren

ahm...

wie wärs mit 090 auf int casten?

4.207 Beiträge seit 2003
vor 14 Jahren

Bei all dem (Regex & Co) bitte an IPv6 denken 😉

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo zusammen,

wenn es nur um die führenden Nullen geht, dann kann man auch "String.TrimStart('0')" verwenden.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren

Auf die Idee mit den casten bin ich dann auch gekommen, war halt schon ein bissl spät gestern Abend. 😃

Meine IP-Adressen werden nun nach der Eingabe in die MaskedTextBox
richtig behandelt. z.B. "192.###.001.10" wird zu "192.0.1.10"
Wenn ich die korrigierte/validiert IP Adresse der
MaskedTextBox zuweisen will ( Mask: 099,099,099,099 )
rückt er die Adresse nach links ein -> 192.011.0##.###

Weiß da jemand Rat?

T
433 Beiträge seit 2006
vor 14 Jahren

Musst die Oktetts wohl wieder 3stellig machen.

R
Rainer Wein Themenstarter:in
90 Beiträge seit 2008
vor 14 Jahren

Hmm, die Lösung wollte ich eigentlich umgehen.
Ich hätte es gern das es wie in der Netzwerkverwaltung in WindowsXp funktioniert,
da werden auch die unnötigen 0 entfernt.

T
433 Beiträge seit 2006
vor 14 Jahren

Ja selbst ist der Programmierer.

Es gibt auch schon vorgefertigte Controls:
http://www.codeproject.com/KB/miscctrl/IpAddrCtrlLib.aspx
oder wenn es etwas kosten darf:
http://www.visualhint.com/index.php/fieldpackeditor/

Gruß,
Tom