我需要我的程序來檢查給定的Windows進程是否濫用網絡。 我想枚舉進程tcp和udp套接字,並查看它們在給定時間段內傳輸了多少數據。如何枚舉給定的Windows進程上的套接字?
有沒有可以提供此類信息的C或.Net API?
我需要我的程序來檢查給定的Windows進程是否濫用網絡。 我想枚舉進程tcp和udp套接字,並查看它們在給定時間段內傳輸了多少數據。如何枚舉給定的Windows進程上的套接字?
有沒有可以提供此類信息的C或.Net API?
你可能會看看WinPcap。 http://www.winpcap.org/
C#.net版本在SharpPcap中可用。 http://www.tamirgal.com/blog/page/SharpPcap.aspx
鏈接需要更新。 Tamirgal的博客真的過時了。到SharpPcap sourceforge項目的鏈接會好得多。 – 2010-11-10 08:01:34
在Win2k上,可以使用GetTcpTable(),GetTcp6Table(),GetUdpTable()和GetUdp6Table()來定位所有活動的套接字連接。但要將它們與特定的進程ID相匹配,您必須手動枚舉系統的打開的句柄以查找TCP/UDP句柄,然後從中查詢進程信息。
在XP上,您可以使用AllocateAndGetTcpExTableFromStack()和AllocateAndGetUdpExTableFromStack(),它可以使用每個套接字連接返回進程ID。
在XP SP2及更高版本上,您可以使用GetExtendedTcpTable()和GetExtendedUdpTable(),它可以返回每個套接字連接的進程ID。
使用sharppcap創建嗅探器。將pcap過濾器設置爲tcp,udp和源地址(IP標頭中的源IP地址以僅精確定位來自該特定主機的傳出數據包)。只需下載SharpPcap源代碼樹並查看包含的示例以瞭解它是如何完成的。對於pcap過濾谷歌「tcpdump(1)」的一個很好的資源,然後單擊第一個鏈接。 – 2010-11-10 08:03:03