我需要在.NET 4.0上监视64位Windows 7计算机上单个进程持有的打开TCP连接数。
本文介绍了在32位窗口上完成此任务的未记录的Win32 API方法“AllocateAndGetTcpExTableFromStack”:
http://www.codeproject.com/KB/IP/iphlpapi.aspx?display=Print
但这在我的机器上失败了(大概是因为我在64位上):
无法找到名为的入口点 'AllocateAndGetTcpExTableFromStack'中 DLL'iplpapi.dll'。
我们如何在64位Windows上执行此操作?
答案 0 :(得分:4)
您可以通过System.Net.NetworkInformation获得良好的开端。特别是IPGlobalProperties.GetActiveTcpConnections。
但是,您会发现此库不会公开PID,因此无法通过与每个连接关联的特定进程来缩小它。我猜测简单地将控制台netstat -ano
的输出解析为托管对象集合会更容易,并使用简单的LINQ查询根据进程ID提取所需的特定连接。但是,如果您经常这样做,我不建议这样做,因为这将是一个非常缓慢的方法。
您也可以在上面引用的DLL中尝试GetExtendedTcpTable()
的PInvoke。我没有测试我的x64盒子,但它可能是你试图调用的特定功能的简单弃用。