在Windows中,有没有一种方法可以枚举进程正在使用的所有打开的端口/套接字?我正在尝试追踪我的应用程序中的高端口使用率,但是我的应用程序使用非常少的端口,因此必须是加载到进程中的其他DLL。
Windows自带的命令行工具netstat
,以及SysInternals的TCPView应用程序,都可以显示拥有每个打开端口的进程名称。
如果您想以编程方式枚举此信息,则必须手动枚举Windows的端口路由表并将其映射到您的进程。 在XP上,您可以使用AllocateAndGetTcpExTableFromStack()
和AllocateAndGetUdpExTableFromStack()
。 在Vista及更高版本中,您可以使用GetExtendedTcpTable()
和GetExtendedUdpTable()
代替。 两组函数均可返回每个打开IP / Port的Process ID,您可以将其与GetCurrentProcessId()
的结果进行比较。
wsock32.dll
中的socket()
(以及WSASocket()
)上设置断点。当你触发断点时,检查调用树。 - undefinedbind()
、accept()
和WSAAccept()
函数。 - undefined