Prüfen von TCP-Ports

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Lehmann.

    Prüfen von TCP-Ports

    Hallo zusammen,

    ich versuche eine Funktion zu schreiben welche mir prüft ob ein Port an einem Netzwerkrechner offen ist. Wenn der Rechner nicht erreichbar ist wird aber eine Exception generiert und das Programm beendet.
    Habe nur wenig Erfahrung mit Sockets und Thread und konnte den Fehler nicht finden. Auch über die Suche habe ich nichts gefunden was mir weiterhilft, hat evtl. jemand eine Idee und kann mir helfen?

    Vielen Dank im Voraus!

    Quellcode

    1. Private Function IsPortOpen(ByVal Host As String, ByVal PortNumber As Integer, ByVal Timeout As Integer) As Boolean
    2. Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    3. Dim success As Boolean
    4. Dim result As IAsyncResult
    5. Try
    6. result = socket.BeginConnect(Host, PortNumber, New AsyncCallback(AddressOf socket.EndConnect), socket)
    7. success = result.AsyncWaitHandle.WaitOne(Timeout, True)
    8. Return success
    9. Catch
    10. Return False
    11. End Try
    12. End Function
    1) Debuggen in VS, wenn dein Programm abstürzt wird angezeigt an welcher stelle im Code...
    2) Dein Programm funktioniert derzeit nur mit IPv4 (Address.Familiy.InterNetwork), liegt hier vielleicht das Problem? Wenn du DNS Namen auflöst im lokalen Netzwerk bekommst du immer die IPv6t zurück.
    EDIT: verwende noch socket.EndConnect()
    /EDIT

    3) Ich würde vielleicht einen TCPClient verwenden: https://github.com/BornToBeRoot/NETworkManager/blob/007b728a6c3ac50cc033151cfb6d32b2587f83b8/Source/NETworkManager/Models/Network/PortScanner.cs#L73
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Die Ausgabe ist
    Ein Ausnahmefehler des Typs "System.Net.Sockets.SocketException" ist in System.dll aufgetreten.
    Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat

    Danke für den Hinweis mit dem DNS, soweit hatte ich das noch nicht getestet, ich rufe die Funktion derzeit mit einer IPv4 Adresse auf und die Rückgabe passt.

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

    Hab es gefunden, so funktioniert es (auch mit tcpClient)

    Quellcode

    1. Private Function IsPortOpen(ByVal Host As String, ByVal PortNumber As Integer, ByVal Timeout As Integer) As Boolean
    2. Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    3. Dim success As Boolean
    4. Dim result As IAsyncResult
    5. Try
    6. result = socket.BeginConnect(Host, PortNumber, Nothing, socket)
    7. success = result.AsyncWaitHandle.WaitOne(Timeout, True)
    8. socket.EndConnect(result)
    9. Return success
    10. Catch
    11. Return False
    12. End Try
    13. End Function

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