在vb中使用Iphlpapi.dll获取网络信息 第二章 第二节 获取MIB-II 接口表

※==================================================================
※本连载文章说明:
※1、连载首发于《软件报》(http://www.sweek.com)2006年21期(2006年5月22日);
※2、此次网上连载采用的是原稿件结构,内容与《软件报》发表略有不同;
※3、谢绝除《软件报》及其相关刊物之外的传统媒体部分或全部转载;
※4、谢绝任何收费媒体、网络转载;
※5、原作者:uruseibest ,blog:http://blog.csdn.net/uruseibest
※6、如有其它疑问,请联系作者;
※7、如有转载,必须连同本说明一并发表,否则将追究转载者责任。
※======================================================================

第二节 获取MIB-II 接口表

1、函数:

Private Declare Function GetIfTable Lib "iphlpapi.dll" (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long

参数说明:

pIfTable:[输入]成功的话指向一个MIB_IFTABLE类型的缓冲区。

PdwSize:[输入,输出]指定pIfTable参数所占缓冲区的大小,如果缓冲区不是足够大返回接口表,函数设置这个参数等于所必须的缓冲区大小。

bOrder:[输入]指定返回的接口表是否按接口序号按上升顺序排列。如果参数为TRUE那么按上升顺序排列。

返回值:成功,返回0;失败,返回错误代码。

 

2、使用到的类型:

①MIB_IFTABLE  包含接口表

Private Type MIB_IFTABLE

    dwNumEntries As Long            '当前网络接口的总数

    MIB_Table(9) As MIB_IFROW         '指向一个包含MIB_IFROW类型的指针

End Type

②MIB_IFROW 保存接口信息

Private Type MIB_IFROW

    wszName(0 To 511) As Byte '接口名称的Unicode字符串,必须为512字节

    dwIndex As Long         '接口编号

    dwType As Long          '接口类型,参看IP_ADAPTER_INFO类型的Type成员

    dwMtu As Long           '最大传输单元

    dwSpeed As Long          '接口速度(字节)

    dwPhysAddrLen As Long   '由bPhysAddr获得的物理地址有效长度

    bPhysAddr(0 To 7) As Byte '物理地址

    dwAdminStatus As Long     '接口管理状态

dwOperStatus As Long            '操作状态,以下值之一:

常量名称
 值
 说明
 
MIB_IF_OPER_STATUS_NON_OPERATIONAL
 0
 网络适配器被禁止,例如:地址冲突
 
MIB_IF_OPER_STATUS_UNREACHABLE
 1
 没有连接
 
MIB_IF_OPER_STATUS_DISCONNECTED
 2
 局域网:电缆未连接;广域网:无载波信号
 
MIB_IF_OPER_STATUS_CONNECTING
 3
 广域网适配器连接中
 
MIB_IF_OPER_STATUS_CONNECTED
 4
 广域网适配器连接上远程对等点
 
MIB_IF_OPER_STATUS_OPERATIONAL
 5
 局域网适配器默认状态
 


 

    dwLastChange As Long    '操作状态最后改变的时间

    dwInOctets As Long        '总共收到(字节)

    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  '接口描述

End Type

 

3、使用到的常量:

 

4、主要代码分析:

①分配足够大的缓存空间,然后直接调用GetIfTable获得接口信息:

Dim ifT As MIB_IFTABLE

LenIfT = Len(ifT)

RValue = GetIfTable(ifT, LenIfT, True)

②由ifT.dwNumEntries获得接口数量,然后用for…next循环获取每个接口信息:

For i = 0 To ifT.dwNumEntries - 1

Print "接口编号:" & ifT.MIB_Table(i).dwIndex

Print "接口速度:" & ifT.MIB_Table(i).dwSpeed

Next

③物理地址的获得:

    PhysAddr = Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(0)), 2)

    For j = 1 To 5

        PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(j)), 2)

    Next

Print "物理地址:" & PhysAddr

 

5、运行时截图:

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450356.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值