Projects

Find all our projects in development below.
All source code is GNU General Public License (GPL)

javaSpy

Browsing frmNetStats.vb (19.64 KB)

Option Explicit On

Imports System.Runtime.InteropServices

Public Class frmNetStats

    Private Const ERROR_SUCCESS = 0

    '================= Statistics ====================
    <StructLayout(LayoutKind.Sequential)> Private Structure MIB_IPSTATS
        Dim dwForwarding As Integer       ' IP forwarding enabled or disabled
        Dim dwDefaultTTL As Integer       ' default time-to-live
        Dim dwInReceives As Integer       ' datagrams received
        Dim dwInHdrErrors As Integer      ' received header errors
        Dim dwInAddrErrors As Integer     ' received address errors
        Dim dwForwDatagrams As Integer    ' datagrams forwarded
        Dim dwInUnknownProtos As Integer  ' datagrams with unknown protocol
        Dim dwInDiscards As Integer       ' received datagrams discarded
        Dim dwInDelivers As Integer       ' received datagrams delivered
        Dim dwOutRequests As Integer      '
        Dim dwRoutingDiscards As Integer  '
        Dim dwOutDiscards As Integer      ' sent datagrams discarded
        Dim dwOutNoRoutes As Integer      ' datagrams for which no route
        Dim dwReasmTimeout As Integer     ' datagrams for which all frags didn't arrive
        Dim dwReasmReqds As Integer       ' datagrams requiring reassembly
        Dim dwReasmOks As Integer         ' successful reassemblies
        Dim dwReasmFails As Integer       ' failed reassemblies
        Dim dwFragOks As Integer          ' successful fragmentations
        Dim dwFragFails As Integer        ' failed fragmentations
        Dim dwFragCreates As Integer      ' datagrams fragmented
        Dim dwNumIf As Integer            ' number of interfaces on computer
        Dim dwNumAddr As Integer          ' number of IP address on computer
        Dim dwNumRoutes As Integer        ' number of routes in routing table
    End Structure

    Private Declare Function GetIpStatistics Lib "IPhlpAPI" _
        (ByRef pStats As MIB_IPSTATS) As Integer

    <StructLayout(LayoutKind.Sequential)> Private Structure MIBICMPSTATS
        Dim dwMsgs As Integer            ' number of messages
        Dim dwErrors As Integer          ' number of errors
        Dim dwDestUnreachs As Integer    ' destination unreachable messages
        Dim dwTimeExcds As Integer       ' time-to-live exceeded messages
        Dim dwParmProbs As Integer       ' parameter problem messages
        Dim dwSrcQuenchs As Integer      ' source quench messages
        Dim dwRedirects As Integer       ' redirection messages
        Dim dwEchos As Integer           ' echo requests
        Dim dwEchoReps As Integer        ' echo replies
        Dim dwTimestamps As Integer      ' timestamp requests
        Dim dwTimestampReps As Integer   ' timestamp replies
        Dim dwAddrMasks As Integer       ' address mask requests
        Dim dwAddrMaskReps As Integer    ' address mask replies
    End Structure

    <StructLayout(LayoutKind.Sequential)> Private Structure MIBICMPINFO
        Dim icmpInStats As MIBICMPSTATS        ' stats for incoming messages
        Dim icmpOutStats As MIBICMPSTATS       ' stats for outgoing messages
    End Structure

    Private Declare Function GetIcmpStatistics Lib "IPhlpAPI" _
        (ByRef pStats As MIBICMPINFO) As Integer

    <StructLayout(LayoutKind.Sequential)> Private Structure MIB_TCPSTATS
        Dim dwRtoAlgorithm As Integer    ' timeout algorithm
        Dim dwRtoMin As Integer          ' minimum timeout
        Dim dwRtoMax As Integer          ' maximum timeout
        Dim dwMaxConn As Integer         ' maximum connections
        Dim dwActiveOpens As Integer     ' active opens
        Dim dwPassiveOpens As Integer    ' passive opens
        Dim dwAttemptFails As Integer    ' failed attempts
        Dim dwEstabResets As Integer     ' established connections reset
        Dim dwCurrEstab As Integer       ' established connections
        Dim dwInSegs As Integer          ' segments received
        Dim dwOutSegs As Integer         ' segments sent
        Dim dwRetransSegs As Integer     ' segments retransmitted
        Dim dwInErrs As Integer          ' incoming errors
        Dim dwOutRsts As Integer         ' outgoing resets
        Dim dwNumConns As Integer        ' cumulative connections
    End Structure

    Private Declare Function GetTcpStatistics Lib "IPhlpAPI" _
        (ByRef pStats As MIB_TCPSTATS) As Integer

    <StructLayout(LayoutKind.Sequential)> Private Structure MIB_UDPSTATS
        Dim dwInDatagrams As Integer    ' received datagrams
        Dim dwNoPorts As Integer        ' datagrams for which no port
        Dim dwInErrors As Integer       ' errors on received datagrams
        Dim dwOutDatagrams As Integer   ' sent datagrams
        Dim dwNumAddrs As Integer       ' number of entries in UDP listener table
    End Structure

    Private Declare Function GetUdpStatistics Lib "IPhlpAPI" _
        (ByRef pStats As MIB_UDPSTATS) As Integer

    Private Sub frmNetStats_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        ' ip stats

        With lvIP.Items
            .Add(New ListViewItem(New String() {"IP forwarding enabled or disabled", ""}))
            .Add(New ListViewItem(New String() {"Default time-to-live", ""}))
            .Add(New ListViewItem(New String() {"Datagrams received", ""}))
            .Add(New ListViewItem(New String() {"Received header errors", ""}))
            .Add(New ListViewItem(New String() {"Received address errors", ""}))
            .Add(New ListViewItem(New String() {"Datagrams forwarded", ""}))
            .Add(New ListViewItem(New String() {"Datagrams with unknown protocol", ""}))
            .Add(New ListViewItem(New String() {"Received datagrams discarded", ""}))
            .Add(New ListViewItem(New String() {"Received datagrams delivered", ""}))
            .Add(New ListViewItem(New String() {"Outgoing datagrams requested", ""}))
            .Add(New ListViewItem(New String() {"Outgoing datagrams discarded", ""}))
            .Add(New ListViewItem(New String() {"Sent datagrams discarded", ""}))
            .Add(New ListViewItem(New String() {"Datagrams for which no route", ""}))
            .Add(New ListViewItem(New String() {"Datagrams for which all frags didn't arrive", ""}))
            .Add(New ListViewItem(New String() {"Datagrams requiring reassembly", ""}))
            .Add(New ListViewItem(New String() {"Successful reassemblies", ""}))
            .Add(New ListViewItem(New String() {"Failed reassemblies", ""}))
            .Add(New ListViewItem(New String() {"Successful fragmentations", ""}))
            .Add(New ListViewItem(New String() {"Failed fragmentations", ""}))
            .Add(New ListViewItem(New String() {"Datagrams fragmented", ""}))
            .Add(New ListViewItem(New String() {"Number of interfaces on computer", ""}))
            .Add(New ListViewItem(New String() {"Number of IP addresses on computer", ""}))
            .Add(New ListViewItem(New String() {"Number of routes in routing table", ""}))
        End With

        ' tcp stats

        With lvTCP.Items
            .Add(New ListViewItem(New String() {"Timeout algorithm", ""}))
            .Add(New ListViewItem(New String() {"Minimum timeout", ""}))
            .Add(New ListViewItem(New String() {"Maximum timeout", ""}))
            .Add(New ListViewItem(New String() {"Maximum connections", ""}))
            .Add(New ListViewItem(New String() {"Active opens", ""}))
            .Add(New ListViewItem(New String() {"Passive opens", ""}))
            .Add(New ListViewItem(New String() {"Failed attempts", ""}))
            .Add(New ListViewItem(New String() {"Established connections reset", ""}))
            .Add(New ListViewItem(New String() {"Established connections", ""}))
            .Add(New ListViewItem(New String() {"Segments received", ""}))
            .Add(New ListViewItem(New String() {"Segments sent", ""}))
            .Add(New ListViewItem(New String() {"Segments retransmitted", ""}))
            .Add(New ListViewItem(New String() {"Incoming errors", ""}))
            .Add(New ListViewItem(New String() {"Outgoing resets", ""}))
            .Add(New ListViewItem(New String() {"Cumulative connections", ""}))
        End With

        ' udp stats

        With lvUDP.Items
            .Add(New ListViewItem(New String() {"Received datagrams", ""}))
            .Add(New ListViewItem(New String() {"Datagrams for which no port", ""}))
            .Add(New ListViewItem(New String() {"Errors on received datagrams", ""}))
            .Add(New ListViewItem(New String() {"Sent datagrams", ""}))
            .Add(New ListViewItem(New String() {"Number of entries in UDP listener table", ""}))
        End With

        ' icmp stats

        With lvICMP.Items
            .Add(New ListViewItem(New String() {"Number of messages", "", ""}))
            .Add(New ListViewItem(New String() {"Number of errors", "", ""}))
            .Add(New ListViewItem(New String() {"Destination unreachable messages", "", ""}))
            .Add(New ListViewItem(New String() {"Time-to-live exceeded messages", "", ""}))
            .Add(New ListViewItem(New String() {"Parameter problem messages", "", ""}))
            .Add(New ListViewItem(New String() {"Source quench messages", "", ""}))
            .Add(New ListViewItem(New String() {"Redirection messages", "", ""}))
            .Add(New ListViewItem(New String() {"Echo requests", "", ""}))
            .Add(New ListViewItem(New String() {"Echo replies", "", ""}))
            .Add(New ListViewItem(New String() {"Timestamp requests", "", ""}))
            .Add(New ListViewItem(New String() {"Timestamp replies", "", ""}))
            .Add(New ListViewItem(New String() {"Address mask requests", "", ""}))
            .Add(New ListViewItem(New String() {"Address mask replies", "", ""}))
        End With

    End Sub

    Private Sub frmNetStats_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown

        timerIP_Tick(Nothing, Nothing)
        timerTCP_Tick(Nothing, Nothing)
        timerUDP_Tick(Nothing, Nothing)
        timerICMP_Tick(Nothing, Nothing)

    End Sub

    Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click

        Me.Close()

    End Sub

    Private Sub timerIP_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerIP.Tick

        ' ip stats

        Dim statsIP As New MIB_IPSTATS
        If GetIpStatistics(statsIP) = ERROR_SUCCESS Then

            With lvIP.Items
                .Item(0).SubItems(1).Text = statsIP.dwForwarding.ToString("###,##0")
                .Item(1).SubItems(1).Text = statsIP.dwDefaultTTL.ToString("###,##0")
                .Item(2).SubItems(1).Text = statsIP.dwInReceives.ToString("###,##0")
                .Item(3).SubItems(1).Text = statsIP.dwInHdrErrors.ToString("###,##0")
                .Item(4).SubItems(1).Text = statsIP.dwInAddrErrors.ToString("###,##0")
                .Item(5).SubItems(1).Text = statsIP.dwForwDatagrams.ToString("###,##0")
                .Item(6).SubItems(1).Text = statsIP.dwInUnknownProtos.ToString("###,##0")
                .Item(7).SubItems(1).Text = statsIP.dwInDiscards.ToString("###,##0")
                .Item(8).SubItems(1).Text = statsIP.dwInDiscards.ToString("###,##0")
                .Item(9).SubItems(1).Text = statsIP.dwInDelivers.ToString("###,##0")
                .Item(10).SubItems(1).Text = statsIP.dwOutRequests.ToString("###,##0")
                .Item(11).SubItems(1).Text = statsIP.dwRoutingDiscards.ToString("###,##0")
                .Item(12).SubItems(1).Text = statsIP.dwOutDiscards.ToString("###,##0")
                .Item(13).SubItems(1).Text = statsIP.dwOutNoRoutes.ToString("###,##0")
                .Item(14).SubItems(1).Text = statsIP.dwReasmTimeout.ToString("###,##0")
                .Item(15).SubItems(1).Text = statsIP.dwReasmReqds.ToString("###,##0")
                .Item(16).SubItems(1).Text = statsIP.dwReasmOks.ToString("###,##0")
                .Item(17).SubItems(1).Text = statsIP.dwReasmFails.ToString("###,##0")
                .Item(18).SubItems(1).Text = statsIP.dwFragOks.ToString("###,##0")
                .Item(19).SubItems(1).Text = statsIP.dwFragCreates.ToString("###,##0")
                .Item(20).SubItems(1).Text = statsIP.dwNumIf.ToString("###,##0")
                .Item(21).SubItems(1).Text = statsIP.dwNumAddr.ToString("###,##0")
                .Item(22).SubItems(1).Text = statsIP.dwNumRoutes.ToString("###,##0")
            End With

        End If

    End Sub

    Private Sub timerTCP_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerTCP.Tick

        ' tcp stats

        Dim statsTCP As New MIB_TCPSTATS
        If GetTcpStatistics(statsTCP) = ERROR_SUCCESS Then

            With lvTCP.Items
                .Item(0).SubItems(1).Text = statsTCP.dwRtoAlgorithm.ToString("###,##0")
                .Item(1).SubItems(1).Text = statsTCP.dwRtoMin.ToString("###,##0")
                .Item(2).SubItems(1).Text = statsTCP.dwRtoMax.ToString("###,##0")
                .Item(3).SubItems(1).Text = statsTCP.dwMaxConn.ToString("###,##0")
                .Item(4).SubItems(1).Text = statsTCP.dwActiveOpens.ToString("###,##0")
                .Item(5).SubItems(1).Text = statsTCP.dwPassiveOpens.ToString("###,##0")
                .Item(6).SubItems(1).Text = statsTCP.dwAttemptFails.ToString("###,##0")
                .Item(7).SubItems(1).Text = statsTCP.dwEstabResets.ToString("###,##0")
                .Item(8).SubItems(1).Text = statsTCP.dwCurrEstab.ToString("###,##0")
                .Item(9).SubItems(1).Text = statsTCP.dwInSegs.ToString("###,##0")
                .Item(10).SubItems(1).Text = statsTCP.dwOutSegs.ToString("###,##0")
                .Item(11).SubItems(1).Text = statsTCP.dwRetransSegs.ToString("###,##0")
                .Item(12).SubItems(1).Text = statsTCP.dwInErrs.ToString("###,##0")
                .Item(13).SubItems(1).Text = statsTCP.dwOutRsts.ToString("###,##0")
                .Item(14).SubItems(1).Text = statsTCP.dwNumConns.ToString("###,##0")
            End With

        End If

    End Sub

    Private Sub timerUDP_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerUDP.Tick

        ' udp stats

        Dim statsUDP As New MIB_UDPSTATS
        If GetUdpStatistics(statsUDP) = ERROR_SUCCESS Then

            With lvUDP.Items
                .Item(0).SubItems(1).Text = statsUDP.dwInDatagrams.ToString("###,##0")
                .Item(1).SubItems(1).Text = statsUDP.dwNoPorts.ToString("###,##0")
                .Item(2).SubItems(1).Text = statsUDP.dwInErrors.ToString("###,##0")
                .Item(3).SubItems(1).Text = statsUDP.dwOutDatagrams.ToString("###,##0")
                .Item(4).SubItems(1).Text = statsUDP.dwNumAddrs.ToString("###,##0")
            End With

        End If

    End Sub

    Private Sub timerICMP_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timerICMP.Tick

        ' icmp stats

        Dim statsICMP As New MIBICMPINFO
        If GetIcmpStatistics(statsICMP) = ERROR_SUCCESS Then

            With lvICMP.Items

                ' in

                .Item(0).SubItems(1).Text = statsICMP.icmpInStats.dwMsgs.ToString("###,##0")
                .Item(1).SubItems(1).Text = statsICMP.icmpInStats.dwErrors.ToString("###,##0")
                .Item(2).SubItems(1).Text = statsICMP.icmpInStats.dwDestUnreachs.ToString("###,##0")
                .Item(3).SubItems(1).Text = statsICMP.icmpInStats.dwTimeExcds.ToString("###,##0")
                .Item(4).SubItems(1).Text = statsICMP.icmpInStats.dwParmProbs.ToString("###,##0")
                .Item(5).SubItems(1).Text = statsICMP.icmpInStats.dwSrcQuenchs.ToString("###,##0")
                .Item(6).SubItems(1).Text = statsICMP.icmpInStats.dwRedirects.ToString("###,##0")
                .Item(7).SubItems(1).Text = statsICMP.icmpInStats.dwEchos.ToString("###,##0")
                .Item(8).SubItems(1).Text = statsICMP.icmpInStats.dwEchoReps.ToString("###,##0")
                .Item(9).SubItems(1).Text = statsICMP.icmpInStats.dwTimestamps.ToString("###,##0")
                .Item(10).SubItems(1).Text = statsICMP.icmpInStats.dwTimestampReps.ToString("###,##0")
                .Item(11).SubItems(1).Text = statsICMP.icmpInStats.dwAddrMasks.ToString("###,##0")
                .Item(12).SubItems(1).Text = statsICMP.icmpInStats.dwAddrMaskReps.ToString("###,##0")

                ' out

                .Item(0).SubItems(2).Text = statsICMP.icmpOutStats.dwMsgs.ToString("###,##0")
                .Item(1).SubItems(2).Text = statsICMP.icmpOutStats.dwErrors.ToString("###,##0")
                .Item(2).SubItems(2).Text = statsICMP.icmpOutStats.dwDestUnreachs.ToString("###,##0")
                .Item(3).SubItems(2).Text = statsICMP.icmpOutStats.dwTimeExcds.ToString("###,##0")
                .Item(4).SubItems(2).Text = statsICMP.icmpOutStats.dwParmProbs.ToString("###,##0")
                .Item(5).SubItems(2).Text = statsICMP.icmpOutStats.dwSrcQuenchs.ToString("###,##0")
                .Item(6).SubItems(2).Text = statsICMP.icmpOutStats.dwRedirects.ToString("###,##0")
                .Item(7).SubItems(2).Text = statsICMP.icmpOutStats.dwEchos.ToString("###,##0")
                .Item(8).SubItems(2).Text = statsICMP.icmpOutStats.dwEchoReps.ToString("###,##0")
                .Item(9).SubItems(2).Text = statsICMP.icmpOutStats.dwTimestamps.ToString("###,##0")
                .Item(10).SubItems(2).Text = statsICMP.icmpOutStats.dwTimestampReps.ToString("###,##0")
                .Item(11).SubItems(2).Text = statsICMP.icmpOutStats.dwAddrMasks.ToString("###,##0")
                .Item(12).SubItems(2).Text = statsICMP.icmpOutStats.dwAddrMaskReps.ToString("###,##0")

            End With

        End If

    End Sub

    Private Sub mnuCopy_IP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy_IP.Click

        Try

            Dim copyData As String = ""
            For i As Integer = 0 To lvIP.Items.Count - 1

                copyData += lvIP.Items(i).Text + vbTab + lvIP.Items(i).SubItems(1).Text + vbCrLf

            Next

            Clipboard.SetText(copyData, TextDataFormat.Text)

        Catch
        End Try

    End Sub

    Private Sub mnuCopy_TCP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy_TCP.Click

        Try

            Dim copyData As String = ""
            For i As Integer = 0 To lvTCP.Items.Count - 1

                copyData += lvTCP.Items(i).Text + vbTab + lvTCP.Items(i).SubItems(1).Text + vbCrLf

            Next

            Clipboard.SetText(copyData, TextDataFormat.Text)

        Catch
        End Try

    End Sub

    Private Sub mnuCopy_UDP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy_UDP.Click

        Try

            Dim copyData As String = ""
            For i As Integer = 0 To lvUDP.Items.Count - 1

                copyData += lvUDP.Items(i).Text + vbTab + lvUDP.Items(i).SubItems(1).Text + vbCrLf

            Next

            Clipboard.SetText(copyData, TextDataFormat.Text)

        Catch
        End Try

    End Sub

    Private Sub mnuCopy_ICMP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy_ICMP.Click

        Try

            Dim copyData As String = ""
            For i As Integer = 0 To lvICMP.Items.Count - 1

                copyData += lvICMP.Items(i).Text + vbTab + lvICMP.Items(i).SubItems(1).Text + vbTab + lvICMP.Items(i).SubItems(2).Text + vbCrLf

            Next

            Clipboard.SetText(copyData, TextDataFormat.Text)

        Catch
        End Try

    End Sub

End Class

Download frmNetStats.vb

Back to file list


Back to project page