0

コンピューターでパケット損失をキャプチャするコードを作成しようとしていますが、これを行うことができた唯一の方法は、NetStat.exe および TraceRt.exe プロセスを実行し、それらをリストボックスにキャプチャすることでした (以下のコードを使用)。 :

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

誰でもこの情報を取得するためのより良いアイデアを持っていますか? このようにハッキングするのではなく、マネージド コードを使用したいと思います。

前もって感謝します!-JFV

4

1 に答える 1

1

これが探しているものかどうかわかりませんが、Ping クラスを調べましたか?

編集: 実際には、TraceRoute については、次の回答をご覧ください: TraceRoute and Ping in C#

Netstat については、http: //towardsnext.wordpress.com/2009/02/09/netstat-in-c/ をご覧ください。

于 2009-03-15T19:35:53.327 に答える