0

J'essaye de coder pour capturer la perte de paquets sur les ordinateurs, mais la seule façon dont j'ai pu le faire était d'exécuter les processus NetStat.exe et TraceRt.exe et de les capturer à une zone de liste (en utilisant le code ci-dessous):Recherche de perte de paquets et de trace dans .NET

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 

quelqu'un at-il une meilleure idée pour obtenir cette information? Je préfère utiliser le code managé plutôt que de le pirater de cette façon.

Merci à l'avance! -JFV

Répondre

Questions connexes