Доступ к данным, похожим на netstat, с помощью .NET - PullRequest
1 голос
/ 13 февраля 2010

Я хотел бы знать, есть ли какой-либо способ доступа к информации, например, количество отброшенных пакетов из .NET Framework. Я знаю о Win32_PerRawData и Ip Helper API. Заранее спасибо

Ответы [ 2 ]

1 голос
/ 13 февраля 2010

Вы можете использовать класс PerformanceCounter. Запустите Perfmon.exe, чтобы узнать, что доступно на вашем компьютере. Например, у вас должен быть сетевой интерфейс + полученные пакеты отброшены для каждого из ваших сетевых адаптеров.

1 голос
/ 13 февраля 2010

Это лениво и жульничество, но .... Я знаю, что я буду за это заслужен ... Не могли бы вы использовать процесс для выполнения netstat -e n, где n - это интервал в секундах. Если вы говорите о Winforms / WPF, используя класс System.Diagnostics.Process для оболочки в скрытое окно с выводом, перенаправленным во входной поток, в котором вы можете анализировать отброшенные пакеты?

Редактировать: Вот пример кода

    public class TestNetStat
    {
        private StringBuilder sbRedirectedOutput = new StringBuilder();
        public string OutputData
        {
            get { return this.sbRedirectedOutput.ToString(); }
        }
        public void Run()
        {
            System.Diagnostics.ProcessStartInfo ps = new System.Diagnostics.ProcessStartInfo();
            ps.FileName = "netstat";
            ps.ErrorDialog = false;
            ps.Arguments = "-e 30";   // Every 30 seconds
            ps.CreateNoWindow = true;
            ps.UseShellExecute = false;
            ps.RedirectStandardOutput = true;
            ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

            using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
            {
                proc.StartInfo = ps;
                proc.Exited += new EventHandler(proc_Exited);
                proc.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OutputDataReceived);
                proc.Start();
                proc.WaitForExit();
                proc.BeginOutputReadLine();
                while (!proc.HasExited) ;
            }
        }

        void proc_Exited(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("proc_Exited: Process Ended");
        }

        void proc_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
        {
            if (e.Data != null) this.sbRedirectedOutput.Append(e.Data + Environment.NewLine);
            // Start parsing the sbRedirected for Discarded packets...
        }
    }

Простое скрытое окно ....

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...