在vb中使用Iphlpapi.dll获取网络信息
vb中使用Iphlpapi.dll获取网络信息
第一章 前言
Windows 98以上的操作系统在系统目录下都带有iphlpapi.dll这个动态链接库文件,它可以帮助程序员方便地获取计算机网络信息。对于C程序员来说,只要有iphlpapi的头文件,调用iphlpapi.dll是很简单的事,但是对于Vb程序员则是比较困难的问题。本文将就Vb中调用iphlpapi.dll来介绍iphlpapi的使用。
第二章 IPHLPAPI 的主要函数
本章将根据iphlpapi.dll提供函数的功能来分别讲解iphlpapi.dll的主要函数。编程时,我们可以调用这些函数迅速获得本机大部分网络信息。
第一节 获取本机网络适配器的信息
1、函数:
Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" ( IpAdapterInfo As Any, pOutBuf
Len As Long) As Long
参数说明:
pAdapterInfo[输出] 指向一个IP_ADAPTER_INFO类型的连接表;
pOutBufLen[输入] 指定pAdapterInfo参数的大小,如果指定大小不足,GetAdaptersInfo将此参数置为所需大小, 并返回一个ERROR_BUFFER_OVERFLOW错误代码。
返回值:成功,返回0;失败,返回错误代码。
备注:此函数不能获得回环(Loopback)适配器的信息
2、使用到的类型:
IP_ADAPTER_INFO类型:包含本机网络适配器信息。
Type IP_ADAPTER_INFO
Next As Long                ‘在适配器列表中指向下一个适配器
ComboIndex As Long    网络连接被重设‘保留未用
AdapterName As String * MAX_ADAPTER_NAME_LENGTH  ‘适配器名
Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH      ‘对网卡的描述,
‘实际上好象是驱动程序的名字
AddressLength As Long        ‘适配器物理地址的长度
Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
‘物理地址,每个字节存放一个十六进制的数值
Index As Long                    ‘适配器索引号
Type As Long              ‘适配器类型,包含以下类型的适配器(见下表):
              常量名称                            说明
              MIB_IF_TYPE_ETHERNET      6        以太网适配器
              MIB_IF_TYPE_TOKENRING    9        令牌环适配器
              MIB_IF_TYPE_FDDI          15      光纤接口适配器
              MIB_IF_TYPE_PPP            23      点到点协议适配器
              MIB_IF_TYPE_LOOPBACK    24      回环(Loopback)适配器
              MIB_IF_TYPE_SLIP            28        串行适配器
              MIB_IF_TYPE_OTHER        其他值    其他类型的适配器 
DhcpEnabled As Long          ‘适配器是否启用了动态主机配置协议(DHCP
CurrentIpAddress As Long    ‘保留(当前使用的IP地址?)
IpAddressList As IP_ADDR_STRING        ‘绑定到此适配器的IP地址链表
GatewayList As IP_ADDR_STRING          ‘默认网关地址链表
DhcpServer As IP_ADDR_STRING      DHCP服务器地址,DhcpEnabled=TRUE时有效
HaveWins As Byte        ‘是否启用WINSWindows Internet Name Service
PrimaryWinsServer As IP_ADDR_STRING            ‘主WINS地址
SecondaryWinsServer As IP_ADDR_STRING          ‘辅WINS地址
LeaseObtained As Long  ‘向DHCP服务器租用IP地址的时间,DhcpEnabled=TRUE时有效
LeaseExpires As Long ‘向DHCP服务器租用IP地址到期时间,DhcpEnabled=TRUE时有效
End Type
IP_ADDR_STRING描述IP 地址链表的节点。
Type IP_ADDR_STRING
Next As Long  ‘指向列表中下一个IP_ADDR_STRING类型。为空,则是最后一个地址
IpAddress As String * 16    ‘点式十进制字串表示Ip地址
IpMask As String * 16        ‘子网掩码
Context As Long ‘网络IP地址标识,符合AddIPAddressDeleteIPAddress函数中的网
‘接口关联参数。
End Type
3、使用到的常量:
Const MAX_ADAPTER_NAME_LENGTH = 260  //适配器名字长度
Const MAX_ADAPTER_ADDRESS_LENGTH = 8  //适配器物理地址长度
Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132  //适配器描述长度
4、主要代码分析:
①调用函数GetAdaptersInfo,以及在调用中应该注意的问题:对函数GetAdaptersInfo进行两次调用,第一次调用获得参数pOutBufLen的实际大小;第二次调用获取IpAdapterInfo的数据。代码如下:
pOutBufLen = 0
error = GetAdaptersInfo(ByVal 0&, pOutBufLen)       
ReDim AdapterInfoBuffer(pOutBufLen - 1)
error = GetAdaptersInfo(AdapterInfoBuffer(0), pOutBufLen)
IpAdapterInfo中可能包含多个IP_ADAPTER_INFO类型,因此下一步使用copymemory函数将数据拷贝到IP_ADAPTER_INFO类型:
CopyMemory AdapterInfo, AdapterInfoBuffer(0), pOutBufLen
③获得了首个IP_ADAPTER_INFO类型后,根据IP_ADAPTER_INFO类型中的Next成员并调用循环语句(DoLoop Until)来获得所有IP_ADAPTER_INFO类型:
Do
pAdapt = AdapterInfo.Next
If pAdapt <> 0 Then
CopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSize
End If
Loop Until pAdapt = 0
④由每次获得的IP_ADAPTER_INFO类型来获取网络适配器物理地址:
    PhysicalAddress = ""

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。