Mik*_*ain 5 .net pinvoke winapi windows-7
我需要从 .NET 4.0 监视 64 位 Windows 7 计算机上单个进程所持有的打开 TCP 连接数。
本文描述了未记录的 Win32 API 方法“AllocateAndGetTcpExTableFromStack”,该方法在 32 位 Windows 上完成此任务:
http://www.codeproject.com/KB/IP/iphlpapi.aspx?display=Print
但这在我的机器上失败了(大概是因为我使用的是 64 位):
无法在 DLL“iphlpapi.dll”中找到名为“AllocateAndGetTcpExTableFromStack”的入口点。
我们如何在 64 位 Windows 上做到这一点?
您可能会通过System.Net.NetworkInformation获得良好的开端。特别是IPGlobalProperties.GetActiveTcpConnections。
但是,您会发现该库不会公开 PID,因此无法通过与每个连接关联的特定进程来缩小范围。我猜想,简单地将控制台的输出解析netstat -ano
为托管对象的集合,并使用简单的 LINQ 查询根据进程 ID 提取所需的特定连接会容易得多。但是,如果您要经常这样做,我不建议您这样做,因为这将是一种非常慢的方法。
GetExtendedTcpTable()
您还可以尝试上面引用的 DLL 中的PInvoke 。我没有要测试的 x64 机器,但这可能是您尝试调用的特定函数的简单弃用。
归档时间: |
|
查看次数: |
5131 次 |
最近记录: |