Finden Paketverlust und Trace Strecke in .NET
-
22-07-2019 - |
Frage
ich Code versuche den Paketverlust auf Computern zu erfassen, aber der einzige Weg, ich in der Lage gewesen bin zu tun, war so Netstat.exe und die Tracert.exe Prozesse zu laufen und sie zu einem listbox erfassen (mit dem Code unten):
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
Hat jemand eine bessere Idee, diese Informationen zu bekommen? Ich würde eher verwalteten Code verwenden, anstatt auf diese Weise durch Hacking.
Vielen Dank im Voraus! -JFV
Lösung
Nicht sicher, ob dies ist, was Sie suchen, aber haben Sie einen Blick auf die Ping-Klasse ?
Edit: Eigentlich für Traceroute, werfen Sie einen Blick auf die Antworten hier: Traceroute und Ping in C # .
Für Netstat, werfen Sie einen Blick auf http: // towardsnext .wordpress.com / 2009/02/09 / netstat-in-c / .