SharpPcap获取流程名称

时间:2013-03-10 11:11:39

标签: c#

我目前正在编写一个C#程序,它具有与wireshack类似的功能,使用SharpPcap捕获数据包,使用PacketDotNet获取有关数据包的信息。我想知道如何获得与数据包相关的进程名称?

1 个答案:

答案 0 :(得分:2)

您可以通过解析ProcessId的输出,然后从netstat -o获取进程名称来获取Process.GetById
可能这段代码会有所帮助,但我对正则表达式不是很强大:)

  var proc = new Process {
    StartInfo = new ProcessStartInfo {
      FileName = "netstat",
      Arguments = "-on",
      UseShellExecute = false,
      RedirectStandardOutput = true,
      CreateNoWindow = true
    }
  };

  proc.Start();
  Regex r = new Regex(@"\S+\s+(?<address>\S+)\s+\S+\s+\S+\s+(?<pid>\d+)");
  while (!proc.StandardOutput.EndOfStream) {
    var res = r.Match(proc.StandardOutput.ReadLine());
    if (res.Success) {
      var pid = int.Parse(res.Groups["pid"].Value);
      var address = res.Groups["address"].Value;
      Console.WriteLine("{0} - {1}", address, Process.GetProcessById(pid).ProcessName);
    }
  }