在vb中使用Iphlpapi.dll获取网络信息 第二章 第十节 获取本机已探测的IP – 物理地址映射表

来源:互联网 发布:淘宝的nmd都是真货吗 编辑:程序博客网 时间:2024/06/01 10:02

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

 

第十节 获取本机已探测的IP – 物理地址映射表

1、函数:

Private Declare Function GetIpNetTable Lib "iphlpapi.dll" (pIpNetTable As MIB_IPNETTABLE, pdwSize As Long, bOrder As Long) As Long

参数说明:

pIpNetTable[输出]指向一个返回IP至物理地址映射作为MIB_IPNETTABLE类型的缓存。

pdwSize[输入,输出] 输入,指定pIpNetTable参数指向缓存的大小;输出,如果指定的缓存大小不够大,将设置此参数为必须的大小。

bOrder[输入] 指定返回的映射表是否按照IP地址排列。TRUE,按序排列。

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

 

2、使用到的类型:

MIB_IPNETTABLE 包含地址解析协议(ARP Address Resolution Protocol)接口入口表。

Type MIB_IPNETTABLE

       DwNumEntries As Long                            当前包含MIB_IPNETROW类型的总数

       MIB_Table() As MIB_IPNETROW      指向一个包含MIB_IPNETROW类型的指针

End Type

 

MIB_IPNETROW 包含地址解析协议(ARP Address Resolution Protocol)接口信息:

Type MIB_IPNETROW

    dwIndex As Long                '指定适配器的索引

    dwPhysAddrLen As Long    'bPhysAddrs字段内包含的物理接口的长度(字节),通常为6

    bPhysAddr(MAXLEN_PHYSADDR) As Byte      '字节数组,包含适配器的物理地址

    dwAddr As Long                       'IP地址

dwType As Long                       'ARP接口的类型,以下值之一:

常量名称

说明

MIB_IPNET_TYPE_OTHER

1

其他条目

MIB_IPNET_TYPE_INVALID

2

无效条目

MIB_IPNET_TYPE_DYNAMIC

3

动态条目

MIB_IPNET_TYPE_STATIC

4

静态条目

End Type

 

3、使用到的常量:

Const MAXLEN_PHYSADDR = 7

 

4、主要代码分析:

定义一个MIB_IPNETTABLE类型的变量并获取此变量的大小,然后直接调用GetIpNetTable

Dim ipNett As MIB_IPNETTABLE

dwsize = Len(ipNett)

r = GetIpNetTable(ipNett, dwsize, bOrder)

调用For…Next循环,获取每个网卡–IP地址映射的信息:

For i = 0 To ipNett.dwNumEntries - 1

    Print "类型", ipNett.MIB_Table(i).dwType

Next

中循环获取物理地址:

    ByteToS = ""

    ByteToS = Right("00" & Hex(ipNett.MIB_Table(i).bPhysAddr(0)), 2)

    For j = 1 To ipNett.MIB_Table(i).dwPhysAddrLen - 1 Step 1

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

    Next

将长整型格式的ip地址转换为标准IP地址格式("xxx.xxx.xxx.xxx"格式):

Private Function inversaip(IPAddrLng As Long) As String

       十、 4

End Function

 

5、运行时截图:

 

原创粉丝点击