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