2013-03-10 153 views
1

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

+0

请包括一些示例代码,以帮助解释的问题! – PearsonArtPhoto 2013-03-10 11:32:18

回答

2

您可以通过从netstat -o解析输出得到ProcessId然后从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); 
    } 
    } 
+0

这真的是唯一的选择吗?在确定哪个浏览器正在使用端口80时,我不认为这会工作得很好? – Nuzzolilo 2014-03-20 04:48:00

+0

不能肯定地说,但我认为你也可以尝试使用[TcpView](http://technet.microsoft.com/en-US/sysinternals/bb897437.aspx),它具有图形界面和命令行工具与netstat非常相似 – user20140268 2014-03-21 10:53:58