好吧,我正在扩展我公司的 flexlm 供应商守护程序,以便向客户端应用程序显示更多信息。
我需要能够在客户端连接之前找出 lmgrd 正在监听的端口。 API 文档似乎相当贫乏,我相信他们将大部分代码保存在编译后的形式中,所以我不能只查看它们的源代码。
是否可以调用 Windows API 的强大功能来找出特定进程正在使用的端口?如果 Sysinternals 的 Process Explorer 可以做到,我应该可以,对吧?什么是一些示例代码?
它需要支持 Windows XP 及更高版本,因为我们的许多客户尚未升级。
我应该注意到,事实证明 FLEX 支持从许可证文件中提取端口。我手边没有代码,但我知道这不是找出您的供应商守护程序/lmgrd 正在运行哪些端口的最佳方法。
最佳答案
GetTcpTable2——见下文
GetTcpTable 函数检索 IPv4 TCP 连接表。
这将填充 MIB_TCPTABLE 结构。
typedef struct _MIB_TCPTABLE {
DWORD dwNumEntries;
MIB_TCPROW table[ANY_SIZE];
} MIB_TCPTABLE, *PMIB_TCPTABLE;
现在是 MIB_TCPROW
typedef struct _MIB_TCPROW {
DWORD dwState;
DWORD dwLocalAddr;
DWORD dwLocalPort;
DWORD dwRemoteAddr;
DWORD dwRemotePort;
} MIB_TCPROW, *PMIB_TCPROW;
重要:
您还需要使用 GetTcpTable2 来获取关联的相应 PID。
typedef struct _MIB_TCPROW2 {
DWORD dwState;
DWORD dwLocalAddr;
DWORD dwLocalPort;
DWORD dwRemoteAddr;
DWORD dwRemotePort;
DWORD dwOwningPid;
TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
} MIB_TCPROW2, *PMIB_TCPROW2;
dwOwningPid
关于windows - 查找应用程序使用的 TCP 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499845/