如何从某个进程获取打开的套接字列表?

时间:2014-02-09 21:58:17

标签: c# windows winapi

Windows资源监视器有一个很好的网络过滤器,很容易获得某些进程的网络统计信息(TCP连接,端口侦听等)。我从this尝试了System.Diagnostics,但所有示例都是关于CPU和内存使用情况的。我找到了this项目,但它看起来很脏而且不安全。我唯一需要的是在我的c#项目中获得资源监视器功能,以执行类似

的操作
var process = new Process("ProcessName");
var sockets = process.getSockets();

没有字节移位和指针,有没有安全合法的解决方案?

1 个答案:

答案 0 :(得分:3)

从命令行,netstat -a -n -o将获取此信息 - 包括每个打开或连接的套接字的进程ID。使用-b选项的Admin privs甚至可以获得EXE名称。因此,如果情况变得更糟,您可以生成一个运行netstat的进程获取此信息。

以编程方式,可以获取此信息的Win32 API包括GetTcpTable2GetExtendedUdpTable。您可以从iphlpapi.dll调用/从.net代码调用这些函数。有关详细信息,请参阅IP helper reference

您需要编写其他代码来映射代码引用的进程ID号的“进程名称”字符串。 (或反过来)。