2012-03-11 99 views
5

我需要確定每個進程的網絡使用統計信息,類似於TCPView可以執行的操作。獲取每個連接的帶寬統計信息

Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

所以,你拍我張貼的this question,或this question重複之前,我想指出的是,那些都擁有完整的答案,可以幫助我真正做到這一點。

我一直在做研究,並且有很多方法可以列出活動連接及其相關進程,無論是使用netstat還是其他Windows API(如IpHlpAPI.dll)。

現在,從什麼Google'ing我做了,我還沒有發現太多 - 除了這些含糊其辭:GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStats。推測分別是通過IPv4和IPv6的TCP。現在我正在閱讀其據稱能夠做我需要做的事情。但是,這仍然遺漏了UDP。而那些在TCPViewer工作的XP系統上也不可用。

我會滿意的使用TCP,但問題是,我似乎無法找到任何如何使用它們從C#的例子。

所以我想這一切都歸結到這幾個問題:

  • 沒有人真正知道怎麼的TCPView對吧?
  • 如何爲TCP使用GetPerTcpConnectionEStats?或者它甚至可以完成我的建議?
  • 是否有另一個可用於UDP的替代方案?

這整個問題是看到進程本身的獨立帶寬使用情況。不計算總系統帶寬使用量。

在此先感謝您的任何和所有答案。

+0

很可能你可以通過WMI /性能計數器來做到這一點,但是我個人發現這些API相當神祕...以防萬一你沒有很好的答案並且正在尋找更多的關鍵詞給谷歌。 – 2012-03-19 17:26:44

+0

任何解決方案? – 2013-06-14 14:21:29

+0

@TomerPeled:我從來沒有找到解決方案,並放棄了項目(因爲它是個人反正)。如果您確實瞭解如何確定各個進程的帶寬使用情況,請將其作爲答案發布,這可能會激發我完成舊項目的一些動機:) – caesay 2013-06-14 19:18:12

回答

1

我花了一點時間試圖弄清楚如何做類似的事情(延遲與帶寬),但由於缺乏投資時間而不得不放棄。我想我會在這裏添加我的發現,希望我們最終能夠得到答案。

您顯然需要使用PInvoke,恐怕具體情況遠遠超出我的經驗。

這個Wrapper Library on CodeProject使用AllocateAndGetTcpExTableFromStack它只適用於Windows XP和Server 2003.它仍然沒有得到你的帶寬,但對不起。

我能找到爲起點(適用於Vista/Server 2008中或更高版本)的最近的信息是pinvoke.net爲GetExtendedTcpTable一個例子。

工具PInvoke Interop Assistant可能有助於確定如何調用非託管代碼。

如果我要繼續努力,這個我會嘗試找出以下幾點:

  1. 如何調用SetPerTcpConnectionEStats通過適當的TCP_ESTATS_TYPE,使TcpConnectionEstatsBandwidth的集合。
  2. 我想用IPGlobalProperties.GetActiveTcpConnections來獲取創建MIB_TCPROW所需的信息。
  3. 確定如何調用GetPerTcpConnectionEStats來監控數據。