Eingabe einer IP-Adresse prüfen/bearbeiten

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jochenld.

    Eingabe einer IP-Adresse prüfen/bearbeiten

    Hallo zusammen,

    ich habe folgende Aufgabenstellung, bei der ich auch mit der Suche im Netz nicht weiterkomme.
    Es geht um die Prüfung einer TextBox/MaskedTexBox auf Inhalt und auf Richtigkeit der Eingabe einer IP Adresse.

    Mein erster Ansatz war es die MaskedTexTBox mit ###.###.###.### vorzugeben (ist die Maske Sinnvoll?).
    Ich konnte zwar prüfen, ob etwas eingegeben wurde, aber nicht ob die Eingabe einer IP-Adresse Entspricht.
    Bei der Übergabe als Parameter werden nach der ersten Zahlengruppe die restliche Segmente übergangen.

    Auch die Idee mit Mask = 000.000.000.000 und der Abfrage

    VB.NET-Quellcode

    1. If MTXTB_IP.MaskCompleted = True Then
    2. MsgBox("Eingabe in Ordnung")
    3. Else
    4. MsgBox("Falsche Eingabe")
    5. End If


    ging schief, da diese Abfrage nur eine vollständige Eingabe (alle 4 Segmente mit je 3 Zahlenwerte) als richtig erkennt.

    Die Schwierigkeit ist (Jedenfalls für mich als Anfänger) die Kombinationsmöglichkeiten bei einer IP-Adresse.
    Und hier würde ich mich über Hilfe sehr freuen.

    Wie kann eine TextBox auf die Richtigkeit einer IP-Adresse mit den minimal/maximal Werten geprüft werden?
    Wie kann der Inhalt der TextBox (als String) zu einem kompakten Sting zusammen gesetzt werden?



    Für jede Idee/Hinweis besten Dank im Voraus.
    Grüße vom ObelixDE


    Hallo, ich bin der neue
    und soll hier Posten.
    Hallo und willkommen im Forum.

    Es gibt eine Klasse namens "IPAddress", welche eine statische Methode namens "TryParse" bereitstellt.
    Dieser kannst du einen String übergeben und die Funktion gibt zurück, ob es sich um eine valide IP-Adresse handelt.
    Falls ja, wird die IP-Adresse direkt als IPAddress-Objekt in der im zweiten Parameter übergebenen Referenz gespeichert.
    Da du das höchstwahrscheinlich nicht brauchst, kannst du da einfach Nothing übergeben.
    Die Benutzung einer MaskedTextBox ist mit dieser Methode eher hinderlich; nimm daher lieber eine normale.

    Hier ein kleines Beispiel:

    VB.NET-Quellcode

    1. If IPAddress.TryParse(TextBoxMitIP.Text, Nothing) Then
    2. MessageBox.Show("Valide IP-Adresse!")
    3. Else
    4. MessageBox.Show("Falsche Eingabe")
    5. End If

    Deine zweite Frage ist mit dieser Methode überflüssig, da die Textbox in diesem Fall keine MaskedTextBox ist, und du den String daher direkt mit der Text-Eigenschaft abrufen kannst.
    (sollte eigentlich mit einer MaskedTextBox auch gehen).

    Achja, MsgBox ist eine VB6-Funktion.
    Verwende, wenn du mit .NET programmierst, lieber das Äquivalent MessageBox.Show().

    Falls du es unbedingt mit einer MaskedTextBox machen möchtest, gibt es dazu auch eine Lösung.
    Verwende anstatt der Nullen bei der Maske Neunen. Diese sagen aus, dass die Zahl da stehen kann, aber nicht muss.
    Daher: 999.999.999.999
    Allerdings bietet das keine Kompatiblität zu IPv6-Adressen, weshalb ich denke, dass die erste Methode vorzuziehen ist.

    Ich hoffe, ich konnte dir helfen. :)
    Hallo haiyyu,

    Danke für die schnelle Antwort. :thumbsup:
    Ich habe den Code wie folgt übernommen:

    VB.NET-Quellcode

    1. Imports System.Net 'wurde vom Compiler eingefügt
    2. If IPAddress.TryParse(MTXTB_IP.Text, Nothing) Then
    3. Ip = "1" 'Variable für weitere Auswertung
    4. MessageBox.Show("Valide IP-Adresse!")
    5. Else
    6. Ip = "0"
    7. MessageBox.Show("Bitte geben Sie die IP Adresse erneut ein", _
    8. "Falsche IP Adresse", MessageBoxButtons.OK, MessageBoxIcon.Error)
    9. End If

    und die MaskedTextBox gegen eine einfache TextBox ersetzt (das msgBox habe ich auch geändert).
    Jetzt habe ich folgendes Phänomen:
    Nur wenn ich 4 Segmente oder mehr (1.1.1.1) eingebe funktioniert die Prüfung.
    Gebe ich nur eine 1 oder 1.1 ein, wird ein True "Valide IP-Adresse!" ausgegeben.

    Mit der MaskedTextBox und Mask=999.999.999.999 funktioniert der Code grundsätzlich.
    Nur die Eingabe ist etwas umständlich. :wacko:
    Wo liegt mein Denkfehler? ?(

    Ach ja, das mit der IPv6-Adresse ist für dieses Projekt nicht relevant, aus diesem Grund kann es hier vernachlässigt werden.
    Grüße vom ObelixDE


    Hallo, ich bin der neue
    und soll hier Posten.
    Guck mal hier: msdn.microsoft.com/en-us/libra….net.ipaddress.parse.aspx
    Das nimmt verschiedene Formate an.
    Wenn du explizit das Format xxx.xxx.xxx.xxx verwenden willst, könntest du diese Methode verwenden:

    VB.NET-Quellcode

    1. Public Function IsValidAddress(ByVal Address As String) As Boolean
    2. If (Address.Length - Address.Replace(".", "").Length) <> 3 Then
    3. Return False
    4. End If
    5. Dim Segments() As String = Address.Split(".")
    6. For Each Segment As String In Segments
    7. If Not Byte.TryParse(Segment, Nothing) Then
    8. Return False
    9. End If
    10. Next
    11. Return True
    12. End Function
    (ungetestet, sollte aber funktionieren)

    Noch ein kleiner Tipp zu diesem Code:

    VB.NET-Quellcode

    1. IP = "1"
    2. ' und
    3. IP = "0"
    Dafür gibt's Bools. Diese können entweder True oder False beinhalten:

    VB.NET-Quellcode

    1. Dim IP As Boolean
    2. IP = True
    3. ' oder
    4. IP = False
    Hallo haiyyu,

    das funzt wie geschnitten Brot :thumbsup: :thumbsup: :thumbsup:
    Danke Dir für Deine Unterstützung.

    Auch den Tipp mit den Bool's. Is ein klasse Vorschlag, hab ich so übernommen.
    Grüße vom ObelixDE


    Hallo, ich bin der neue
    und soll hier Posten.
    So kannst du auch gleich prüfen ob die IP erreichbar ist....

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim ip As String
    3. Dim erreichbar As Boolean
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. ip = TextBox1.Text
    6. If My.Computer.Network.Ping(ip, 450) = True Then
    7. MsgBox("klappt")
    8. Else
    9. MsgBox("klappt nicht")
    10. End If
    11. End Sub
    12. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jochenld“ ()