2009-05-04 48 views
2

我需要計算各種應用程序從網絡發送和接收的字節數量。首先我想過使用LSP,但是有很多應用根本不使用LSP(例如SMB)。這就是爲什麼我寫了一個小嗅探器。此應用程序在IP級別上工作並使用recvfrom收集數據。Windows上套接字號碼的PID?

所以我有遠程主機,本地和遠程端口的地址。這非常酷,但我也需要擁有本地套接字所有者的PID。那麼,有沒有簡單的方法來獲得這種PID?解決方法是使用GetTcpTable,GetUdpTable或者AllocateAndGetUdpExTableFromStack和AllocateAndGetTcpExTableFromStack(有很多的2K,XP,XP SP2和Vista之間的那些功能的差異)和查找結果表,但似乎不雅,效率低下......

所以是否有任何一種「GetPIDOfSocket」函數?只有WinAPI(no .net)解決方案才能使用,因爲可以使用各種語言,例如C++,Delphi。

+1

由於您似乎最近才加入,請允許我給您一個提示:提供您正在使用的編程語言通常很有幫助。你還有一個空的標籤插槽來填充它:) – 2009-05-04 11:48:27

回答

2

對不起,不得不告訴你,但使用GetTcpTableAllocateAndGetTcpExTableFromStack不是一種解決方法,它實際上是其他netstat類型應用程序的工作方式。 AFAIK沒有Win32 "GetPIDOfSocket"函數,您唯一的選擇是使用端口表函數進行輪詢。但至少你可以自己編寫代碼並且不必產生netstat進程。

請參閱SysInternals C源代碼netstatphere。沒有太多它很值得一看。