2013-03-10 151 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