我需要我的程序来检查给定的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