2

現在、Wireshack と同様の機能を持つ C# プログラムを作成しています。SharpPcap を使用してパケットをキャプチャし、PacketDotNet を使用してパケットに関する情報を取得します。パケットに関連付けられたプロセスの名前を取得する方法を教えてください。

4

1 に答える 1

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);
    }
  }
于 2013-03-10T13:56:03.353 に答える