windows下获取进程网络链接状况(包括打开的侦听端口号)

来源:互联网 发布:渲染大师软件 编辑:程序博客网 时间:2024/05/19 12:24

windows下一般都是通过IP Helper系列API接口获取网络状态,获取链接状况的接口是GetExtendedTcpTable

DWORD GetExtendedTcpTable(  __out    PVOID pTcpTable,  __inout  PDWORD pdwSize,  __in     BOOL bOrder,  __in     ULONG ulAf,  __in     TCP_TABLE_CLASS TableClass,  __in     ULONG Reserved);

MSDN的地址是:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365928(v=vs.85).aspx

先传递空Buffer(*pdwSize = 0),会返回ERROR_INSUFFICIENT_BUFFER,*pdwSize里面有需要的Buffer大小。

ulAf:IP地址v4还是v6,AF_INET、AF_INET6

TableClass,对于AF_INET:

TableClass valuepTcpTable structureTCP_TABLE_BASIC_ALLMIB_TCPTABLETCP_TABLE_BASIC_CONNECTIONSMIB_TCPTABLETCP_TABLE_BASIC_LISTENERMIB_TCPTABLETCP_TABLE_OWNER_MODULE_ALLMIB_TCPTABLE_OWNER_MODULETCP_TABLE_OWNER_MODULE_CONNECTIONSMIB_TCPTABLE_OWNER_MODULETCP_TABLE_OWNER_MODULE_LISTENERMIB_TCPTABLE_OWNER_MODULETCP_TABLE_OWNER_PID_ALLMIB_TCPTABLE_OWNER_PIDTCP_TABLE_OWNER_PID_CONNECTIONSMIB_TCPTABLE_OWNER_PIDTCP_TABLE_OWNER_PID_LISTENERMIB_TCPTABLE_OWNER_PID

对于AF_INET6:

TableClass value

pTcpTable structure

TCP_TABLE_BASIC_ALL

MIB_TCP6TABLE

TCP_TABLE_BASIC_CONNECTIONS

MIB_TCP6TABLE

TCP_TABLE_BASIC_LISTENER

MIB_TCP6TABLE

TCP_TABLE_OWNER_MODULE_ALL

MIB_TCP6TABLE_OWNER_MODULE

TCP_TABLE_OWNER_MODULE_CONNECTIONS

MIB_TCP6TABLE_OWNER_MODULE

TCP_TABLE_OWNER_MODULE_LISTENER

MIB_TCP6TABLE_OWNER_MODULE

TCP_TABLE_OWNER_PID_ALL

MIB_TCP6TABLE_OWNER_PID

TCP_TABLE_OWNER_PID_CONNECTIONS

MIB_TCP6TABLE_OWNER_PID

TCP_TABLE_OWNER_PID_LISTENER

MIB_TCP6TABLE_OWNER_PID

MIB_TCPTABLE_OWNER_PID

typedef struct {  DWORD                dwNumEntries;  MIB_TCPROW_OWNER_PID table[ANY_SIZE];} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;

MIB_TCPROW_OWNER_PID

 

typedef struct _MIB_TCPROW_OWNER_PID {  DWORD dwState;  DWORD dwLocalAddr;  DWORD dwLocalPort;  DWORD dwRemoteAddr;  DWORD dwRemotePort;  DWORD dwOwningPid;} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;