在同一进程中枚举开放端口

时间:2012-09-19 18:19:19

标签: windows winapi sockets tcp port

在Windows中是否有任何方法可以枚举它正在使用的所有开放端口/套接字的进程?我试图在我的应用程序中追踪一些高端口使用情况,但我的应用程序使用的很少,所以必须将其他DLL加载到进程中。

1 个答案:

答案 0 :(得分:3)

Windows自己的命令行netstat实用程序以及SysInternals的TCPView应用程序可以显示拥有每个开放端口的进程的名称。

如果要以可编程方式枚举此信息,则必须手动枚举Windows的端口路由表并将其映射到您的进程。在XP上,您可以使用AllocateAndGetTcpExTableFromStack()AllocateAndGetUdpExTableFromStack()。在Vista及更高版本中,您可以使用GetExtendedTcpTable()GetExtendedUdpTable()代替。这两组函数都可以返回每个打开的IP /端口的进程ID,然后可以将其与GetCurrentProcessId()的结果进行比较。