2009-08-26 59 views
1

我需要我的程序來檢查給定的Windows進程是否濫用網絡。 我想枚舉進程tcp和udp套接字,並查看它們在給定時間段內傳輸了多少數據。如何枚舉給定的Windows進程上的套接字?

有沒有可以提供此類信息的C或.Net API?

+0

使用sharppcap創建嗅探器。將pcap過濾器設置爲tcp,udp和源地址(IP標頭中的源IP地址以僅精確定位來自該特定主機的傳出數據包)。只需下載SharpPcap源代碼樹並查看包含的示例以瞭解它是如何完成的。對於pcap過濾谷歌「tcpdump(1)」的一個很好的資源,然後單擊第一個鏈接。 – 2010-11-10 08:03:03

回答

1

在Win2k上,可以使用GetTcpTable(),GetTcp6Table(),GetUdpTable()和GetUdp6Table()來定位所有活動的套接字連接。但要將它們與特定的進程ID相匹配,您必須手動枚舉系統的打開的句柄以查找TCP/UDP句柄,然後從中查詢進程信息。

在XP上,您可以使用AllocateAndGetTcpExTableFromStack()和AllocateAndGetUdpExTableFromStack(),它可以使用每個套接字連接返回進程ID。

在XP SP2及更高版本上,您可以使用GetExtendedTcpTable()和GetExtendedUdpTable(),它可以返回每個套接字連接的進程ID。