MIB_IFROW Structure

来源:互联网 发布:征途人物数据修改器 编辑:程序博客网 时间:2024/06/06 08:31

先说一下,使用以后函数记得加:

#include <iphlpapi.h>
#pragma comment ( lib, "iphlpapi.lib")

 

使用GetIfTable()获取各个端口信息的时候用到的 _MIB_IFTABLE结构:

 typedef struct _MIB_IFTABLE {
  DWORD     dwNumEntries; //得到的端口个数
  MIB_IFROW table[ANY_SIZE];//得到的各个端口的信息,这个结构才是重点
} MIB_IFTABLE, *PMIB_IFTABLE;

 

typedef struct _MIB_IFROW {  WCHAR wszName[MAX_INTERFACE_NAME_LEN];  DWORD dwIndex;  DWORD dwType;  DWORD dwMtu;  DWORD dwSpeed;  DWORD dwPhysAddrLen;  BYTE  bPhysAddr[MAXLEN_PHYSADDR];  DWORD dwAdminStatus;  DWORD 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;  BYTE  bDescr[MAXLEN_IFDESCR];} MIB_IFROW, *PMIB_IFROW;

 

wzsName:包含了该接口的名字(多字节的),具体也不知道哈意思,就是一串数字,有懂的和我说一下

dwIndex:该接口的索引值,比如有多个网卡的时候,每个网卡都有一个索引值,是会随着网卡正在被使用的个数变化的

dwType:该接口的类型,这个类型是被IANA(是个什么协会吧)定义的,有以下几种:

ValueMeaning

IF_TYPE_OTHER
1

Some other type of network interface.

IF_TYPE_ETHERNET_CSMACD
6

An Ethernet network interface.

IF_TYPE_ISO88025_TOKENRING
9

A token ring network interface.

IF_TYPE_PPP
23

A PPP network interface.

IF_TYPE_SOFTWARE_LOOPBACK
24

A software loopback network interface.

IF_TYPE_ATM
37

An ATM network interface.

IF_TYPE_IEEE80211
71

An IEEE 802.11 wireless network interface.

IF_TYPE_TUNNEL
131

A tunnel type encapsulation network interface.

IF_TYPE_IEEE1394
144

An IEEE 1394 (Firewire) high performance serial bus network interface.

其中24是网络回路的网卡(我自己是这样叫的),就是127.0.0.1那个,应该是每个机子都有的吧

一般我们用的是6.

dwMtu:百度一下MTU就知道了,就是该接口的最大传输单元,理解为该通信协议的某一层上面能通过的最大的数据包的大小(以字节为单位)

dwSpeed:该接口最大的传输速率,可是看成是这个接口每秒最多传多大的数据的一个规格,我刚开始的时候以为这是该接口的即时传输速度呢,郁闷

dwPhysAddrLen: bPhysAddr指向的地址的长度

bPhysAddr:指向该接口地址的指针

dwAdminStatus:该接口的管理状态,按我的理解就是人为设定的那个状态:启用/禁用

dwOperStatus:该接口的操作状态,它可以取以下的值,看了下面的值就知道是什么意思了

0   MIB_IF_OPER_STATUS_NON_OPERATIONAL    网络适配器被禁止的状态;

1   MIB_IF_OPER_STATUS_UNREACHABLE    没有连接的状态;

2   MIB_IF_OPER_STATUS_DISCONNECTED  电缆未连接的状态;

3   MIB_IF_OPER_STATUS_CONNECTING   广域网适配器连接中的状态;

4   MIB_IF_OPER_STATUS_CONNECTED   广域网适配器连接上远程对等点的状态;

5   MIB_IF_OPER_STATUS_OPERATIONAL  局域网适配器默认的连接状态;

dwLastChange: 适配器状态最后一次改变的时间;

dwInOctets: 该接口总的收到的数据大小;

dwInUcastPkts As Long     '总共收到(unicast包)
dwInNUcastPkts As Long    '总共收到(non-unicast包),包括广播包和多点传送包dwInDiscards As Long     '收到后丢弃包总数(即使没有错误)
dwInErrors As Long        '收到出错包总数
dwInUnknownProtos As Long   '收到后因协议不明而丢弃的包总数
dwOutOctets As Long       '总共发送(字节)
dwOutUcastPkts As Long    '总共发送(unicast包)
dwOutNUcastPkts As Long '总共发送(non-unicast包),包括广播包和多点传送包
dwOutDiscards As Long     '发送丢弃包总数(即使没有错误)
dwOutErrors As Long       '发送出错包总数
dwOutQLen As Long      '发送队列长度
dwDescrLen As Long       ' bDescr部分有效长度
bDescr(0 To 255) As Byte  '接口描述  也就是在设备管理器上看的到名字

 

 

用一秒钟前后得到的dwInOctets数据相减,就是这一秒中该接口的流量,用这个方法就可以计算机子的即时流量了

 

但是当机子有多个网卡时,怎么判断目前机子正在用的是哪一个,我也不知道,在网上看好多例子,当有多网卡时,都是直接用第一个来计算流量的,难道默认得到的结构数组第一个就是正在用的? 好像是这样的,如果有更详细的,留下说明吧

原创粉丝点击