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 value | pTcpTable structure |
|---|---|
| TCP_TABLE_BASIC_ALL | MIB_TCPTABLE |
| TCP_TABLE_BASIC_CONNECTIONS | MIB_TCPTABLE |
| TCP_TABLE_BASIC_LISTENER | MIB_TCPTABLE |
| TCP_TABLE_OWNER_MODULE_ALL | MIB_TCPTABLE_OWNER_MODULE |
| TCP_TABLE_OWNER_MODULE_CONNECTIONS | MIB_TCPTABLE_OWNER_MODULE |
| TCP_TABLE_OWNER_MODULE_LISTENER | MIB_TCPTABLE_OWNER_MODULE |
| TCP_TABLE_OWNER_PID_ALL | MIB_TCPTABLE_OWNER_PID |
| TCP_TABLE_OWNER_PID_CONNECTIONS | MIB_TCPTABLE_OWNER_PID |
| TCP_TABLE_OWNER_PID_LISTENER | MIB_TCPTABLE_OWNER_PID |
对于AF_INET6:
| TableClass value | pTcpTable structure |
|---|---|
| TCP_TABLE_BASIC_ALL | |
| TCP_TABLE_BASIC_CONNECTIONS | |
| TCP_TABLE_BASIC_LISTENER | |
| TCP_TABLE_OWNER_MODULE_ALL | |
| TCP_TABLE_OWNER_MODULE_CONNECTIONS | |
| TCP_TABLE_OWNER_MODULE_LISTENER | |
| TCP_TABLE_OWNER_PID_ALL | |
| TCP_TABLE_OWNER_PID_CONNECTIONS | |
| TCP_TABLE_OWNER_PID_LISTENER |
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;
Windows网络状态获取详解:使用IPHelper API接口与GetExtendedTcpTable函数
本文深入探讨了在Windows环境下利用IPHelper系列API接口,特别是GetExtendedTcpTable函数,来获取网络连接状态的方法。通过传递不同参数,可以获取IPv4和IPv6网络连接的详细信息,包括状态、本地和远程地址及端口等关键数据。
1万+

被折叠的 条评论
为什么被折叠?



