1:GetNetworkParams:获取网络参数
ULONG
WINAPI
GetAdaptersInfo(
_Out_writes_bytes_opt_(*SizePointer) PIP_ADAPTER_INFO AdapterInfo,
_Inout_ PULONG SizePointer //需要的内存空间
);
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//适配器名称
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//描述
UINT AddressLength;//物理地址长度
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//物理地址
DWORD Index;//适配器索引
UINT Type;//适配器类型
UINT DhcpEnabled;//DHCP是否开启
PIP_ADDR_STRING CurrentIpAddress;//IP地址
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;//DHCP服务器地址
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
2:GetAdaptersInfo:获取适配器信息
ULONG
WINAPI
GetAdaptersInfo(
_Out_writes_bytes_opt_(*SizePointer) PIP_ADAPTER_INFO AdapterInfo,
_Inout_ PULONG SizePointer //需要的内存空间
);
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;//保留值
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];//适配器名称
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];//描述
UINT AddressLength;//物理地址长度
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];//物理地址
DWORD Index;//适配器索引
UINT Type;//适配器类型
UINT DhcpEnabled;//DHCP是否开启
PIP_ADDR_STRING CurrentIpAddress;//IP地址
IP_ADDR_STRING IpAddressList; //IP地址链表
IP_ADDR_STRING GatewayList; //网关地址链表
IP_ADDR_STRING DhcpServer;//DHCP服务器地址链表
BOOL HaveWins; //这个适配器是否启用WINS(名称服务)
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
3:GetNumberOfInterfaces:获取接口数目
DWORD
WINAPI
GetNumberOfInterfaces(
_Out_ PDWORD pdwNumIf
);
4:GetInterfaceInfo:获取接口信息
DWORD
WINAPI
GetInterfaceInfo(
_Out_writes_bytes_opt_(*dwOutBufLen) PIP_INTERFACE_INFO pIfTable,
_Inout_ PULONG dwOutBufLen
);
typedef struct _IP_INTERFACE_INFO {
LONG NumAdapters;//接口数目
IP_ADAPTER_INDEX_MAP Adapter[1];
} IP_INTERFACE_INFO,*PIP_INTERFACE_INFO;
typedef struct _IP_ADAPTER_INDEX_MAP {
ULONG Index;//接口索引
WCHAR Name[MAX_ADAPTER_NAME];//接口名称
} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
5:GetIfTable:获取网络接口信息
DWORD
WINAPI
GetIfTable(
_Out_writes_bytes_opt_(*pdwSize) PMIB_IFTABLE pIfTable,
_Inout_ PULONG pdwSize,
_In_ BOOL bOrder
);
typedef struct _MIB_IFROW {
WCHAR wszName[MAX_INTERFACE_NAME_LEN];//网络接口名称
IF_INDEX dwIndex;//网络接口索引
IFTYPE dwType;//网络接口类型
DWORD dwMtu;//底层硬件的MTU
DWORD dwSpeed;//接口的bps
DWORD dwPhysAddrLen;//bPhysAddr的物理地址长度
UCHAR bPhysAddr[MAXLEN_PHYSADDR];//物理地址
DWORD dwAdminStatus;//接口管理状态
INTERNAL_IF_OPER_STATUS dwOperStatus;//接口运行状态
DWORD dwLastChange;//上次运行状态改变时间
DWORD dwInOctets;//接口接收到的字节数
DWORD dwInUcastPkts;//接口接收到的单播包的数目
DWORD dwInNUcastPkts;//接口接收到的单播包以外的包的数目
DWORD dwInDiscards;//接收包被抛弃的数据包数目,即使数据包没有错误
DWORD dwInErrors;//接受包因为错误而被抛弃的数据包数目
DWORD dwInUnknownProtos;//接收包因为协议未知而被抛弃的数据包数目
DWORD dwOutOctets;//接口发送出的数据包数目
DWORD dwOutUcastPkts;//接口发送出的单播数据包数目
DWORD dwOutNUcastPkts;//接口发送出的非单播数据包数目
DWORD dwOutDiscards;//发送包被抛弃的数据包数目,即使数据包没有错误
DWORD dwOutErrors;//发送包因为错误而被抛弃的数据包数目
DWORD dwOutQLen;//发送队列长度
DWORD dwDescrLen;//接口描述
UCHAR bDescr[MAXLEN_IFDESCR];
} MIB_IFROW, *PMIB_IFROW;
typedef struct _MIB_IFTABLE {
DWORD dwNumEntries;//接口数目
MIB_IFROW table[ANY_SIZE];
} MIB_IFTABLE, *PMIB_IFTABLE;
6:GetIpAddrTable:获取IP地址表
DWORD
WINAPI
GetIpAddrTable(
_Out_writes_bytes_opt_(*pdwSize) PMIB_IPADDRTABLE pIpAddrTable,
_Inout_ PULONG pdwSize,
_In_ BOOL bOrder
);
typedef struct _MIB_IPADDRROW{
DWORD dwAddr;//IP地址
DWORD dwIndex;//适配器索引
DWORD dwMask;//子网掩码
DWORD dwBCastAddr;//广播地址
DWORD dwReasmSize;//
unsigned short unused1;
unsigned short wType;//类型
} MIB_IPADDRROW, *PMIB_IPADDRROW;
typedef struct _MIB_IPADDRTABLE {
DWORD dwNumEntries;
MIB_IPADDRROW table[ANY_SIZE];
} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
7:GetTcpTable:获取TCP连接链表
ULONG
WINAPI
GetTcpTable(
_Out_writes_bytes_opt_(*SizePointer) PMIB_TCPTABLE TcpTable,
_Inout_ PULONG SizePointer,
_In_ BOOL Order
);
typedef struct _MIB_TCPTABLE {
DWORD dwNumEntries;
MIB_TCPROW table[ANY_SIZE];
} MIB_TCPTABLE, *PMIB_TCPTABLE;
typedef struct _MIB_TCPROW{
union {
DWORD dwState; // Old field used DWORD type.
MIB_TCP_STATE State; // New field uses enum type.
};//状态
DWORD dwLocalAddr;//本地IP
DWORD dwLocalPort;//本地端口
DWORD dwRemoteAddr;//目标IP
DWORD dwRemotePort;//目标端口
} MIB_TCPROW, *PMIB_TCPROW;
8:GetUdpTable:获取UDP连接链表
ULONG
WINAPI
GetUdpTable(
_Out_writes_bytes_opt_(*SizePointer) PMIB_UDPTABLE UdpTable,
_Inout_ PULONG SizePointer,
_In_ BOOL Order
);
typedef struct _MIB_UDPROW {
DWORD dwLocalAddr;//本地IP
DWORD dwLocalPort;//本地端口
} MIB_UDPROW, *PMIB_UDPROW;
typedef struct _MIB_UDPTABLE {
DWORD dwNumEntries;
MIB_UDPROW table[ANY_SIZE];
} MIB_UDPTABLE, *PMIB_UDPTABLE;
9:GetIpForwardTable:IP路由表
DWORD
WINAPI
GetIpForwardTable(
_Out_writes_bytes_opt_(*pdwSize) PMIB_IPFORWARDTABLE pIpForwardTable,
_Inout_ PULONG pdwSize,
_In_ BOOL bOrder
);
typedef struct _MIB_IPFORWARDROW {
DWORD dwForwardDest;//目标IP
DWORD dwForwardMask;//子网掩码
DWORD dwForwardPolicy;
DWORD dwForwardNextHop;//绕送下一站
IF_INDEX dwForwardIfIndex;
union {
DWORD dwForwardType; // Old field name uses DWORD type.
MIB_IPFORWARD_TYPE ForwardType; // New field name uses enum type.
};//路由类型
union {
DWORD dwForwardProto; // Old field name uses DWORD type.
MIB_IPFORWARD_PROTO ForwardProto; // New field name uses enum type.
};//路由协议
DWORD dwForwardAge;
DWORD dwForwardNextHopAS;
DWORD dwForwardMetric1;
DWORD dwForwardMetric2;
DWORD dwForwardMetric3;
DWORD dwForwardMetric4;
DWORD dwForwardMetric5;
} MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
typedef struct _MIB_IPFORWARDTABLE {
DWORD dwNumEntries;
MIB_IPFORWARDROW table[ANY_SIZE];
} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
10:GetIpNetTable:获取ARP列表
ULONG
WINAPI
GetIpNetTable(
_Out_writes_bytes_opt_(*SizePointer) PMIB_IPNETTABLE IpNetTable,
_Inout_ PULONG SizePointer,
_In_ BOOL Order
);
typedef struct _MIB_IPNETROW_LH {
IF_INDEX dwIndex;//接口索引
DWORD dwPhysAddrLen;//物理地址长度
UCHAR bPhysAddr[MAXLEN_PHYSADDR];//物理地址
DWORD dwAddr;//IP地址
union {
DWORD dwType; // Old field name was just a DWORD.
MIB_IPNET_TYPE Type; // New field name uses the enum type.
};//类型
} MIB_IPNETROW_LH, *PMIB_IPNETROW_LH;
typedef struct _MIB_IPNETTABLE {
DWORD dwNumEntries;//ARP缓存数目
MIB_IPNETROW table[ANY_SIZE];
} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
11:GetExtendedTcpTable:获取进程关联TCP列表
DWORD
WINAPI
GetExtendedTcpTable(
_Out_writes_bytes_opt_(*pdwSize) PVOID pTcpTable,
_Inout_
_When_(ulAf == AF_INET, _Deref_in_range_(>=, sizeof(MIB_TCPTABLE)))
_When_(
(TableClass == TCP_TABLE_OWNER_PID_LISTENER ||
TableClass == TCP_TABLE_OWNER_PID_CONNECTIONS ||
TableClass == TCP_TABLE_OWNER_PID_ALL) && ulAf == AF_INET6,
_Deref_in_range_(>=, sizeof(MIB_TCP6TABLE_OWNER_PID)))
_When_(
(TableClass == TCP_TABLE_OWNER_MODULE_LISTENER ||
TableClass == TCP_TABLE_OWNER_MODULE_CONNECTIONS ||
TableClass == TCP_TABLE_OWNER_MODULE_ALL) && ulAf == AF_INET6,
_Deref_in_range_(>=, sizeof(MIB_TCP6TABLE_OWNER_MODULE)))
PDWORD pdwSize,
_In_ BOOL bOrder,
_In_ ULONG ulAf,
_In_ TCP_TABLE_CLASS TableClass,
_In_ ULONG Reserved
);
typedef struct _MIB_TCPROW_OWNER_PID
{
DWORD dwState;//状态
DWORD dwLocalAddr;//本地IP
DWORD dwLocalPort;//本地端口
DWORD dwRemoteAddr;//远程IP
DWORD dwRemotePort;//远程端口
DWORD dwOwningPid;//pid
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
typedef struct _MIB_TCPTABLE_OWNER_PID
{
DWORD dwNumEntries;//列表数目
MIB_TCPROW_OWNER_PID table[ANY_SIZE];
} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;