以编程方式查找拥有端口的进程

时间:2017-12-05 17:28:45

标签: windows winapi

如何找到使用给定TCP端口的进程?我知道我可以呼叫netstat(How can you find out which process is listening on a port on Windows?),但如果它不太难,我宁愿直接使用Windows API,而不是启动外部进程并解析其输出。我可以看到netstat使用GetTcpTable和GetOwnerModuleFromTcpEntry等函数,但我不知道如何将它们连接到进程ID。

2 个答案:

答案 0 :(得分:1)

使用GetTcpTable / GetTcp6Table / GetUdpTable / GetUdp6Table函数,我不知道如何在不自己走桌子的情况下做到这一点(也就是说,你不能直接通过端口号查询)。你必须对tcp,tcp6,udp和udp6使用不同的调用。

答案 1 :(得分:0)

GetExtendedTcpTable是您需要调用的函数,其中一个标志表示您想要拥有进程ID(TCP_TABLE_OWNER_PID_*)。这将导致它返回MIB_TCPTABLE_OWNER_PID结构,其中包含MIB_TCPROW_OWNER_PID数组。如果需要IPv4或IPv6,则需要指定一个标志。对于Udp,GetExtendedUdpTable具有相似的行为。