Ping und nslookup gleichzeitig laufen lassen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Kabelsalat.

    Ping und nslookup gleichzeitig laufen lassen

    Hallo,

    ich habe schon ein kleines Programm. Es geht darum IP Adressen anzuzeigen die zu 100% ungenutzt sind:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim i As Integer
    3. For i = 0 To 255
    4. ProgressBar1.Value += 1
    5. If My.Computer.Network.Ping("IP.IP.IP." + i.ToString()) = False Then
    6. ListBox1.Items.Add("IP.IP.IP." & i.ToString())
    7. End If
    8. Next i


    Das ganze funktioniert auch, alle IP Adressen werden in einer Liste angezeigt die man nicht anpingen kann.

    So jetzt kann es ja aber sein das diese IP Adressen "augeschaltet" und statisch sind.

    Ich müsste also noch nach diesen gefundenen Adressen ein nslookup hinterher schicken, da seh ich ja dann ob hinter der IP Adresse ein PC registriert ist oder nicht.
    Also wenn er eine IP nicht pingen kann und hinter dieser IP Adresse über nslookup kein PC registriert ist soll er die freie IP in die Liste schreiben.

    Gibt es da sowas in etwa wie Computer.Network.nslookup? :D


    Desweiteren werden im Aktuellen Programm oben die IP Adressen nicht in Echtzeit aufgelistet, bedeutet, sie erscheinen erst komplett alle in der Liste wenn die Suche beendet ist.
    Die Progressbar hingegen aktualisiert sich ordnungsgemäß. :huh:


    Wäre für Hilfe Dankbar ;)


    MfG

    petaod schrieb:


    Danke erstmal. Das funktioniert auch im Prinzip nur habe ich Probeme mit meiner Listbox.

    Bei

    VB.NET-Quellcode

    1. Dim DNSEintrag As IPHostEntry = Dns.GetHostEntry(ListBox1.ToString)
    2. TextBox1.Text = DNSEintrag.HostName()

    bekomme ich z.B. den Fehler, dass der angegebene Host unbekannt ist. Ich kann bei Listbox1. andere Eigenschaften wählen, aber es kommen immer andere Fehler.

    Wenn ich die IP so eintrage, also:

    VB.NET-Quellcode

    1. Dim DNSEintrag As IPHostEntry = Dns.GetHostEntry("192.168.XXX.XXX")
    2. TextBox1.Text = DNSEintrag.HostName()


    dann funktioniert das :S
    Ich hab das jetzt soweit hinbekommen, aber mir fehlt noch eine If Abfragen wenn Dns.GetHostEntry eine IP überprüft aus der Listbox hinter der kein DNS Eintrag steckt. In dem Fall stürzt das Programm noch ab. Ich bräuchte sowas wie = null oder so.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Dim Adresse As String
    3. Adresse = ListBox1.Text
    4. For Each Adresse In ListBox1.Items
    5. Dim DNSEintrag As IPHostEntry = Dns.GetHostEntry(Adresse)
    6. ListBox2.Items.Add(DNSEintrag.HostName)
    7. Next
    8. End Sub

    petaod schrieb:

    In dem Fall stürzt das Programm noch ab
    Mit welcher Exception?

    An der Stelle könnte ein Try..Catch ganz sinnvoll sein.
    Wenn sich die Adresse nicht auflösen lässt, genau diese Exception abfangen und einfach nichts eintragen.
    "SocketExeption wurde nicht behandelt"
    "Der angeforderte Name ist gültig und wurde in der Datenbank gefunden. Er verfügt jedoch nicht über die richtigen zugeordneten Daten, die ausgewertet werden sollten"

    Kann man Try-Catch in die For Schleife einbauen?

    Kabelsalat schrieb:

    Kann man Try-Catch in die For Schleife einbauen?
    Klar.
    Mach in dem Fall nur ein Catch auf die SocketException

    VB.NET-Quellcode

    1. Try
    2. ListBox2.Items.Add(Dns.GetHostEntry(Adresse).HostName)
    3. Catch ex as SocketException
    4. 'cannot resolve IP address
    5. End Try
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --