好的,所以我将我公司的flexlm供应商守护程序扩展为对客户端应用程序更具启示性。
我需要能够找出客户端连接之前lmgrd正在监听的端口。 API文档似乎相当贫乏,我相信它们会将大多数代码保留在编译形式中,因此我不能只看其源代码。
是否可以利用Windows API的强大功能来找出特定进程正在使用的端口?如果Sysinternals的Process Explorer可以做到,那么我应该可以,对吗?这将是一些示例代码?
它需要支持Windows XP及更高版本,因为我们的许多客户端尚未升级。
我应该注意,事实证明FLEX支持从许可证文件中提取端口。我前面没有代码,但是知道这不是找出供应商守护程序/lmgrd正在运行哪些端口的最佳方法。
最佳答案
GetTcpTable2-参见下文
GetTcpTable2 function
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/