Find all our projects in development below.
All source code is GNU General Public License (GPL)
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