vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: HTML/Internet/Netzwerk · Netzwerk   |   VB-Versionen: VB.NET31.07.06
Pingen mit Auflösung des Hostnamen (VB 2005)

Sie wollen einen Host oder eine IP anpingen und wollen dabei wie in DOS den Hostnamen auflösen wenn Sie eine IP-Adresse verwendet haben?

Autor:   Carsten StuplichBewertung:     [ Jetzt bewerten ]Views:  21.724 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Sie wollen einen Host oder eine IP anpingen und wollen dabei wie in DOS den Hostnamen auflösen wenn Sie eine IP-Adresse verwendet haben, dann hilft Ihnen nachfolgende Klasse, die auf der Ping-Klasse des .NET-Frameworks 2.0 aufbaut.

Erstellen Sie in Ihrem Projekt eine neue Klasse mit dem Namen clsVBnetPing.

Im Deklarations-Bereich fügen Sie folgende Importe ein:

Imports System
Imports System.Net
Imports System.Net.Sockets

Zwischen Public Class clsVBnetPing und End Class fügen Sie nun folgenden Code ein:

  Dim mIpAddr As String
  Dim mResponseTime As Long
  Dim mError As String
  Dim mHostName As String
  Dim mSuccess As Boolean
 
  ''' <summary>
  ''' Liefert die Rückmeldezeit in Millisekunden zurück
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property ResponseTime() As Integer
    Get
      ResponseTime = mResponseTime
    End Get
  End Property
 
  ''' <summary>
  ''' Liefert die Fehlermeldung zurück (ist leer bei erfolreichem Ping)
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property ErrorDesc() As String
    Get
      ErrorDesc = mError
    End Get
  End Property
 
  ''' <summary>
  ''' Liefert True zurück wenn Ping erfolgreich war (sonst False)
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property Success() As Boolean
    Get
      Success = mSuccess
    End Get
  End Property
 
  ''' <summary>
  ''' Liefert die IP-Adresse des Hosts zurück
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property IpAddress() As String
    Get
      If mIpAddr IsNot Nothing Then 
        IpAddress = mIpAddr.ToString()
      Else
        IpAddress = ""
      End If
    End Get
  End Property
 
  ''' <summary>
  ''' Liefert den Hostnamen zurück
  ''' </summary>
  ''' <value></value>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public ReadOnly Property HostName() As String
    Get
      HostName = mHostName
    End Get
  End Property
 
  ''' <summary>
  ''' Versucht den Hostnamen aufzulösen (Führt kein Ping durch.)
  ''' </summary>
  ''' <param name="HName"></param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public Function CheckByName(ByVal HName As String) As Boolean
    mError = ""
    Try
      mIpAddr = Dns.GetHostEntry(HName).AddressList(0).ToString
      mHostName = Dns.GetHostEntry(HName.ToString).HostName
      If mHostName.Length = 0 Then mHostName = HName
      Return True
    Catch ex As System.Net.Sockets.SocketException
      mError = ex.Message
      If mHostName.Length = 0 Then mHostName = HName
      Return False
    End Try
  End Function
 
  ''' <summary>
  ''' Versucht die IP-Adresse aufzulösen (Führt kein Ping durch.)
  ''' </summary>
  ''' <param name="ipAddr"></param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public Function CheckByIpAddr(ByVal ipAddr As String) As Boolean
    mError = ""
    Try
      mIpAddr = System.Net.IPAddress.Parse(ipAddr).ToString
      Try
        mHostName = Dns.GetHostEntry(mIpAddr.ToString).HostName
        If mHostName.Equals(mIpAddr) Then mHostName = ""
        Return True
      Catch SEx As SocketException
        mError = SEx.Message
        Return False
      End Try
    Catch Ex As Exception
      mError = Ex.Message
      Return False
    End Try
    Return False
  End Function
 
  ''' <summary>
  ''' Diese Funktion prüft ob der übergebene String eine 
  ''' (gültige) IP-Adresse ist
  ''' </summary>
  ''' <param name="sHostNameOrAddress">IP oder Hostname</param>
  ''' <returns>Liefert False zurück wenn die IP ungültig ist 
  ''' bzw. ein Hostname übergeben wurde</returns>
  ''' <remarks></remarks>
  Public Function IsValidIP(ByVal sHostNameOrAddress As String) As Boolean
    Return System.Net.IPAddress.TryParse(sHostNameOrAddress, _
      System.Net.IPAddress.Any)
  End Function
 
  ''' <summary>
  ''' Sendet ein Ping-Signal an die angegebene IP-Adresse oder den Hostnamen.
  ''' Über "Success" erhalten sie die Fehlermledung fals beim Pingen ein 
  ''' Fehler aufgetreten ist
  ''' </summary>
  ''' <param name="sHostNameOrAddress">String. Der URL, der Computername oder 
  ''' die IP-Adressse des Servers an den ein Ping-Signal gesendet werden soll.</param>
  ''' <param name="timeout">Zeitgrenzwert (in Millisekunden) für das Herstellen 
  ''' einer Verbindung mit dem Ziel</param>
  ''' <param name="ResolveIPAndHostname">Wenn True, wird die IP-Adresse zu dem 
  ''' übergebenen Hostnamen (und umgekehrt) ermittelt.</param>
  ''' <returns></returns>
  ''' <remarks></remarks>
  Public Function Ping(ByVal sHostNameOrAddress As String, _
    Optional ByVal timeout As Integer = 5000, _
    Optional ByVal ResolveIPAndHostname As Boolean = True) As Boolean
 
    Dim bIsIP As Boolean = System.Net.IPAddress.TryParse( _
      sHostNameOrAddress, System.Net.IPAddress.Any)
    Dim oPing = New System.Net.NetworkInformation.Ping
    Dim PingReturn As System.Net.NetworkInformation.PingReply
 
    mError = ""
    mHostName = ""
    mIpAddr = ""
    mResponseTime = 0
 
    Try
      PingReturn = oPing.Send(sHostNameOrAddress, timeout)
      ' Feststellen ob Ping erfolgreich war
      If PingReturn.Status = NetworkInformation.IPStatus.Success Then
        ' IP und Hostname ermitteln (jenachdem od übergebener String 
        ' eine IP oder Host war)
        If ResolveIPAndHostname = True Then
          If bIsIP = False Then
            mIpAddr = PingReturn.Address().ToString
            mHostName = sHostNameOrAddress
          Else
            mIpAddr = sHostNameOrAddress
            mHostName = Dns.GetHostEntry(mIpAddr).HostName
          End If
        End If
 
        mResponseTime = PingReturn.RoundtripTime
        mSuccess = True
        Return True
      Else
        ' Prüfen ob der String von sHostNameOrAddress eine IP oder 
        ' ein Hostname war
        If bIsIP Then 
          mIpAddr = sHostNameOrAddress
        Else 
          mHostName = sHostNameOrAddress
        End If
        mError = "Ping failed. IPStatus: " & PingReturn.Status.ToString
        mSuccess = False
        Return False
      End If
 
    Catch ex As System.Net.NetworkInformation.PingException
      If bIsIP Then 
        mIpAddr = sHostNameOrAddress
      Else 
        mHostName = sHostNameOrAddress
      End If
      mError = ex.InnerException.Message
      mSuccess = False
      Return False
    End Try
End Function

Und nun noch ein Beispiel für den Aufruf der neuen Klasse:

Dim oPing As clsVBnetPing = New clsVBnetPing
 
' Als erstes muss die Funktion Ping aufgerufen werden
If oPing.Ping("localhost") = True Then
  ' Ping erfolgreich
Else
  ' Ping fehlgeschlagen
End If
 
' Jetzt können die Rückgabe-Werte der Funktion ausgelesen werden
MessageBox.Show("IPAdress: " & oPing.IpAddress & vbCrLf & _
  "Host: " & oPing.HostName & vbCrLf & _
  "Success: " & oPing.Success & vbCrLf & _
  "Millisek.: " & oPing.ResponseTime & vbCrLf & _
  "Fehlermeldung: " & oPing.ErrorDesc)
 
oPing = Nothing

Dieser Tipp wurde bereits 21.724 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel