好的,所以我将我公司的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/

10-11 22:42
查看更多