I am trying to code to capture the packet loss on computers, but the only way I’ve been able to do so was to run the NetStat.exe and the TraceRt.exe processes and capture them to a listbox (using the code below):
Private Sub myProcess() Dim p As System.Diagnostics.Process Dim theFile, sTemp, sLineOut, mySent, myRetrans As String Dim intSentStart As Double Dim isEnabled As Boolean p = New System.Diagnostics.Process theFile = t.Name If File.Exists('c:\windows\system32\' & theFile) Then theFile = 'c:\windows\system32\' & theFile Else MessageBox.Show('Unable to find the ' & theFile & ' file on your computer.', 'File Find Error!', MessageBoxButtons.OK, MessageBoxIcon.Error) End If Select Case t.Name Case 'TraceRt.exe' p.StartInfo.Arguments = '-h 30 www.stackoverflow.com' Case 'NetStat.exe' p.StartInfo.Arguments = '-s -p tcp' End Select Try p.StartInfo.FileName = theFile p.StartInfo.CreateNoWindow = True p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardOutput = True p.Start() p.PriorityClass = System.Diagnostics.ProcessPriorityClass.Normal sLineOut = '' Do While Not p.HasExited sTemp = p.StandardOutput.ReadLine() If sTemp <> '' Then sLineOut = sLineOut & sTemp & vbNewLine 'Send to listbox setTrace(sTemp) End If Loop If sLineOut = '' Then 'Clear Listbox clearTrace() myProcess() Exit Sub End If If t.Name = 'NetStat.exe' Then Try If lboxTrace.Items.Count < 9 Then 'Clear Listbox clearTrace() myProcess() Exit Sub End If mySent = '' mySent = lboxTrace.Items.Item(8) '('Segments Sent') mySent = Trim(mySent.Replace('Segments Sent', '')) mySent = Trim(mySent.Replace('=', '')) myRetrans = '' myRetrans = lboxTrace.Items.Item(9) myRetrans = Trim(myRetrans.Replace('Segments Retransmitted', '')) myRetrans = Trim(myRetrans.Replace('=', '')) intSentStart = Math.Round((myRetrans / mySent) * 100, 2) 'setTrace sends data to the listbox If intSentStart < 2 Then setTrace('Your Current Packet Loss is: ' & intSentStart & '%.') setTrace('Your packet loss is within acceptable ranges.') Else setTrace('Your Current Packet Loss is: ' & intSentStart & '%.') setTrace('Your packet loss is below acceptable ranges!') setTrace('Please contact your Internet Provider about your Internet Connection.') End If Catch ex As Exception 'Clear Listbox clearTrace() myProcess() Exit Sub End Try End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
Does anyone have a better idea to get this information? I’d rather use managed code instead of hacking through it this way.
Thanks in Advance! -JFV
Not sure if this is what you’re looking for, but have you taken a look at the Ping class?
Edit: Actually for TraceRoute, take a look at the answers here: TraceRoute and Ping in C#.
For Netstat, take a look at http://towardsnext.wordpress.com/2009/02/09/netstat-in-c/.