Results 1 to 6 of 6

Thread: Ping IP

  1. #1

    Thread Starter
    Fanatic Member Jumpercables's Avatar
    Join Date
    Jul 2005
    Location
    Colorado
    Posts
    592

    Ping IP

    How can I PING an IP Address to see if gets a response back, and maybe evaluate packet loss, etc.

    I am trying to do the same thing as in a dos prompt ping 192.168.1.1

    C# - .NET 1.1 / .NET 2.0

    "Take everything I say with a grain of salt, sometimes I'm right, sometimes I'm wrong but in the end we've both learned something."
    _____________________
    Regular Expressions Library
    Connection String
    API Functions
    Database FAQ & Tutorial

  2. #2
    Frenzied Member conipto's Avatar
    Join Date
    Jun 2005
    Location
    Chicago
    Posts
    1,175

    Re: Ping IP

    The way I've seen others do it, is to use that same ping you're talking about, with IO redirection, and read the data. There is a post by Gigemboy in the .NET codebank on redirecting I/O that you might find usefull.

    Bill
    Hate Adobe Acrobat? My Codebank Sumbissions - Easy CodeDom Expression evaluator: (VB / C# ) -- C# Scrolling Text Display

    I Like to code when drunk. Don't say you weren't warned.

  3. #3
    Junior Member
    Join Date
    Feb 2006
    Posts
    20

    Re: Ping IP

    Here's a class I use for pinging:

    Code:
    Option Explicit On 
    
    Imports System
    Imports System.Net
    Imports System.Net.Sockets
    
    Public Class clsPing
    
        Public Structure stcError
            Dim Number As Integer
            Dim Description As String
        End Structure
    
        Private Const PING_ERROR_BASE As Long = &H8000
    
        Public Const PING_SUCCESS As Long = 0
        Public Const PING_ERROR As Long = (-1)
        Public Const PING_ERROR_HOST_NOT_FOUND As Long = PING_ERROR_BASE + 1
        Public Const PING_ERROR_SOCKET_DIDNT_SEND As Long = PING_ERROR_BASE + 2
        Public Const PING_ERROR_HOST_NOT_RESPONDING As Long = PING_ERROR_BASE + 3
        Public Const PING_ERROR_TIME_OUT As Long = PING_ERROR_BASE + 4
    
        Private Const ICMP_ECHO As Integer = 8
        Private Const SOCKET_ERROR As Integer = -1
    
        Private udtError As stcError
    
        Private Const intPortICMP As Integer = 7
        Private Const intBufferHeaderSize As Integer = 8
        Private Const intPackageHeaderSize As Integer = 28
    
        Private byteDataSize As Byte
        Private lngTimeOut As Long
        Private ipheLocalHost As System.Net.IPHostEntry
        Private ipheHost As System.Net.IPHostEntry
    
        Public Property TimeOut() As Long
            Get
                Return lngTimeOut
            End Get
            Set(ByVal Value As Long)
                lngTimeOut = Value
            End Set
        End Property
    
        Public Property DataSize() As Byte
            Get
                Return byteDataSize
            End Get
            Set(ByVal Value As Byte)
                byteDataSize = Value
            End Set
        End Property
    
        Public ReadOnly Property Identifier() As Byte
            Get
                Return 0
            End Get
        End Property
    
        Public ReadOnly Property Sequence() As Byte
            Get
                Return 0
            End Get
        End Property
    
        Public ReadOnly Property LocalHost() As System.Net.IPHostEntry
            Get
                Return ipheLocalHost
            End Get
        End Property
    
        Public Property Host() As Object
            Get
                Return ipheHost
            End Get
            Set(ByVal Value As Object)
                If (Value.GetType.ToString.ToLower = "system.string") Then
                    '*
                    '* Find the Host's IP address
                    '*
                    Try
                        ipheHost = System.Net.Dns.GetHostByName(Value)
                    Catch
                        ipheHost = Nothing
                        udtError.Number = PING_ERROR_HOST_NOT_FOUND
                        udtError.Description = "Host " & Value & " not found."
                    End Try
                ElseIf (Value.GetType.ToString.ToLower = "system.net.iphostentry") Then
                    ipheHost = (Value)
                Else
                    ipheHost = Nothing
                End If
            End Set
        End Property
    
    
        Public Sub New()
    
            byteDataSize = 32
            lngTimeOut = 500
            udtError = New stcError
    
    
            ipheLocalHost = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName())
    
    
            ipheHost = Nothing
    
        End Sub
    
       
        Public Function Ping() As Long
    
            Dim intCount As Integer
            Dim aReplyBuffer(255) As Byte
    
            Dim intNBytes As Integer = 0
    
            Dim intEnd As Integer
            Dim intStart As Integer
    
            Dim epFrom As System.Net.EndPoint
            Dim epServer As System.Net.EndPoint
            Dim ipepServer As System.Net.IPEndPoint
    
            ipepServer = New System.Net.IPEndPoint(ipheHost.AddressList(0), 0)
            epServer = CType(ipepServer, System.Net.EndPoint)
    
            epFrom = New System.Net.IPEndPoint(ipheLocalHost.AddressList(0), 0)
    
    
            DataSize = Convert.ToByte(DataSize + intBufferHeaderSize)
    
            If (DataSize Mod 2 = 1) Then
                DataSize += Convert.ToByte(1)
            End If
            Dim aRequestBuffer(DataSize - 1) As Byte
    
           
            '*
    
            '*
            '* Set Type Field
            '*
            aRequestBuffer(0) = Convert.ToByte(8) ' ECHO Request
    
            '*
            '* Set ID field
            '*
            BitConverter.GetBytes(Identifier).CopyTo(aRequestBuffer, 4)
    
            '*
            '* Set Sequence
            '*
            BitConverter.GetBytes(Sequence).CopyTo(aRequestBuffer, 6)
    
            '*
            '* Load some data into buffer
            '*
            Dim i As Integer
            For i = 8 To DataSize - 1
                aRequestBuffer(i) = Convert.ToByte(i Mod 8)
            Next i
    
            '*
            '* Calculate Checksum
            '*
            Call CreateChecksum(aRequestBuffer, DataSize, aRequestBuffer(2), aRequestBuffer(3))
    
    
            '*
            '* Try send the packet
            '*
            Try
                '*
                '* Create the socket
                '*
                Dim sckSocket As New System.Net.Sockets.Socket( _
                                                Net.Sockets.AddressFamily.InterNetwork, _
                                                Net.Sockets.SocketType.Raw, _
                                                Net.Sockets.ProtocolType.Icmp)
                sckSocket.Blocking = True
    
                '*
                '* Sends Package
                '*
                sckSocket.SendTo(aRequestBuffer, 0, DataSize, SocketFlags.None, ipepServer)
    
                '*
                '* Records the Start Time, after sending the Echo Request
                '*
                intStart = System.Environment.TickCount
    
                '*
                '* Waits for response
                '*
                Do
                    'Application.DoEvents()
                    intNBytes = sckSocket.ReceiveFrom(aReplyBuffer, SocketFlags.None, epServer)
                Loop Until (intNBytes > 0) Or ((System.Environment.TickCount - intStart) > TimeOut)
    
                '*
                '* Check to see if the TimeOut was hit
                '*
                If ((System.Environment.TickCount - intStart) > 1000) Then
                    udtError.Number = PING_ERROR_TIME_OUT
                    udtError.Description = "Time Out"
                    Return (PING_ERROR)
                End If
    
                '*
                '* Records End Time
                '*
                intEnd = System.Environment.TickCount
    
                If (intNBytes > 0) Then
                    '*
                    '* Informs on GetLastError the state of the server
                    '*
                    udtError.Number = (aReplyBuffer(19) * &H100) + aReplyBuffer(20)
                    Select Case aReplyBuffer(20)
                        Case 0 : udtError.Description = "Success"
                        Case 1 : udtError.Description = "Buffer too Small"
                        Case 2 : udtError.Description = "Destination Unreahable"
                        Case 3 : udtError.Description = "Dest Host Not Reachable"
                        Case 4 : udtError.Description = "Dest Protocol Not Reachable"
                        Case 5 : udtError.Description = "Dest Port Not Reachable"
                        Case 6 : udtError.Description = "No Resources Available"
                        Case 7 : udtError.Description = "Bad Option"
                        Case 8 : udtError.Description = "Hardware Error"
                        Case 9 : udtError.Description = "Packet too Big"
                        Case 10 : udtError.Description = "Reqested Timed Out"
                        Case 11 : udtError.Description = "Bad Request"
                        Case 12 : udtError.Description = "Bad Route"
                        Case 13 : udtError.Description = "TTL Exprd In Transit"
                        Case 14 : udtError.Description = "TTL Exprd Reassemb"
                        Case 15 : udtError.Description = "Parameter Problem"
                        Case 16 : udtError.Description = "Source Quench"
                        Case 17 : udtError.Description = "Option too Big"
                        Case 18 : udtError.Description = "Bad Destination"
                        Case 19 : udtError.Description = "Address Deleted"
                        Case 20 : udtError.Description = "Spec MTU Change"
                        Case 21 : udtError.Description = "MTU Change"
                        Case 22 : udtError.Description = "Unload"
                        Case Else : udtError.Description = "General Failure"
                    End Select
                End If
    
                Return (intEnd - intStart)
            Catch oExcept As Exception
                '
            End Try
    
        End Function
    
        Public Function GetLastError() As stcError
            Return udtError
        End Function
    
        ' ICMP requires a checksum that is the one's
        ' complement of the one's complement sum of
        ' all the 16-bit values in the data in the
        ' buffer.
        ' Use this procedure to load the Checksum
        ' field of the buffer.
        ' The Checksum Field (hi and lo bytes) must be
        ' zero before calling this procedure.
        Private Sub CreateChecksum(ByRef data() As Byte, ByVal Size As Integer, ByRef HiByte As Byte, ByRef LoByte As Byte)
            Dim i As Integer
            Dim chk As Integer = 0
    
            For i = 0 To Size - 1 Step 2
                chk += Convert.ToInt32(data(i) * &H100 + data(i + 1))
            Next
    
            chk = Convert.ToInt32((chk And &HFFFF&) + Fix(chk / &H10000&))
            chk += Convert.ToInt32(Fix(chk / &H10000&))
            chk = Not (chk)
    
            HiByte = Convert.ToByte((chk And &HFF00) / &H100)
            LoByte = Convert.ToByte(chk And &HFF)
        End Sub
    
    End Class
    AdoSoft INC
    A Software Development Company

  4. #4
    PowerPoster
    Join Date
    Aug 2005
    Location
    College Station, TX
    Posts
    4,521

    Re: Ping IP

    Quote Originally Posted by conipto
    There is a post by Gigemboy in the .NET codebank on redirecting I/O that you might find usefull.
    Bill
    Check my sig for "Automate Command Prompt and Redirect Output to Application"

    If you are using 2005, also might check out My.Computer.Network.Ping...
    Last edited by gigemboy; Feb 5th, 2006 at 10:26 PM.

  5. #5

    Thread Starter
    Fanatic Member Jumpercables's Avatar
    Join Date
    Jul 2005
    Location
    Colorado
    Posts
    592

    Re: Ping IP

    I am using 2005, and I will check out your suggestions thanks

    C# - .NET 1.1 / .NET 2.0

    "Take everything I say with a grain of salt, sometimes I'm right, sometimes I'm wrong but in the end we've both learned something."
    _____________________
    Regular Expressions Library
    Connection String
    API Functions
    Database FAQ & Tutorial

  6. #6
    PowerPoster gep13's Avatar
    Join Date
    Nov 2004
    Location
    The Granite City
    Posts
    21,963

    Re: Ping IP

    Hello

    Since you are using 2005, have a look here, very useful tutorial on pinging lots of machines and checking for responses.

    Hope this helps.

    Gary

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width