2009-08-26 85 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。