运维开发网

如何获取.NET中某个进程持有的开放TCP连接数

运维开发网 https://www.qedev.com 2020-07-05 11:48 出处:网络 作者:运维开发网整理
我需要在.NET 4.0上监视64位 Windows 7计算机上单个进程持有的打开TCP连接数. 本文介绍了在32位窗口上完成此任务的未记录的Win32 API方法“AllocateAndGetTcpExTableFromStack”: http://www.codeproject.com/KB/IP/iphlpapi.aspx?display=Print 但这在我的机器上失败了(大概是因为我在6
我需要在.NET 4.0上监视64位 Windows 7计算机上单个进程持有的打开TCP连接数.

本文介绍了在32位窗口上完成此任务的未记录的Win32 API方法“AllocateAndGetTcpExTableFromStack”:

http://www.codeproject.com/KB/IP/iphlpapi.aspx?display=Print

但这在我的机器上失败了(大概是因为我在64位):

Unable to find an entry point named

‘AllocateAndGetTcpExTableFromStack’ in

DLL ‘iphlpapi.dll’.

我们如何在64位Windows上执行此操作?

你可能会在 System.Net.NetworkInformation开始一个好的开始.特别是 IPGlobalProperties.GetActiveTcpConnections.

但是,您会发现此库不公开PID,因此无法通过与每个连接关联的特定进程来缩小它.我猜测简单地将控制台netstat -ano的输出解析为托管对象集合会更容易,并使用简单的LINQ查询根据进程ID提取所需的特定连接.但是,如果您经常这样做,我不建议这样做,因为这将是一个非常慢的方法.

您也可以在上面引用的DLL中尝试PInvoke for GetExtendedTcpTable().我没有测试我的x64盒子,但它可能是你试图调用的特定功能的简单弃用.

0

精彩评论

暂无评论...
验证码 换一张
取 消