


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在 vb 中使用 Iphlpapi.dll 获取网络信息第一章 前言Windows 98 以上的操作系统在系统目录下都带有 iphlpapi.dll 这个动态库文件,它可以 帮助程序员方便地获取计算机网络信息。 对于 C 程序员来说, 只要有 iphlpapi 的头文件, 调 用 iphlpapi.dll 是很简单的事,但是对于 Vb 程序员则是比较困难的问题。本文将就 Vb 中调 用 iphlpapi.dll 来介绍 iphlpapi 的使用。第二章 IPHLPAPI 的主要函数本章将根据 iphlpapi.dll 提供函数的功能来分别讲解 iphlpapi.dll 的主要函数。编程时, 我
2、们可以调用这些函数迅速获得本机大部分网络信息。第一节 获取本机网络适配器的信息1、函数:Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" ( IpAdapterInfo As Any, pOutBufLen As Long) As Long参数说明:pAdapterInfo :输出 指向一个 IP_ADAPTER_INFO 类型的连接表;pOutBufLen :输入 指定 pAdapterInfo 参数的大小,如果指定大小不足, GetAdaptersInfo 将此参数置为所需大小 , 并返回一个 ERR
3、OR_BUFFER_OVERFLOW 错误代码。返回值:成功,返回 0;失败,返回错误代码。备注:此函数不能获得回环( Loopback )适配器的信息2、使用到的类型: IP_ADAPTER_INFO 类型:包含本机网络适配器信息。Type IP_ADAPTER_INFONext As Long在适配器列表中指向下一个适配器适配器名ComboIndex As Long 保留未用AdapterName As String * MAX_ADAPTER_NAME_LENGTHDescription As String * MAX_ADAPTER_DESCRIPTION_LENGTH对网卡的描述,实
4、际上好象是驱动程序的名字AddressLength As Long 适配器物理地址的长度Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte物理地址, 每个字节存放一个十六进制的数值Index As Long适配器索引号Type As Long适配器类型,包含以下类型的适配器(见下表) :常量名称值说明MIB_IF_TYPE_ETHERNET6以太网适配器MIB_IF_TYPE_TOKENRING9令牌环适配器MIB_IF_TYPE_FDDI15光纤接口适配器MIB_IF_TYPE_PPP23点到点协议适配器MIB_IF_TYPE_LOOPBACK24
5、回环( Loopback )适配器MIB_IF_TYPE_SLIP28串行适配器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_STRINGDHCP 服务器地址, DhcpEnabled=TRUE 时有效H
6、aveWins As Byte是否启用 WINS ( Windows Internet Name Service )辅 WINS 地址PrimaryWinsServer As IP_ADDR_STRING 主 WINS 地址SecondaryWinsServer As IP_ADDR_STRINGLeaseObtained As Long 向 DHCP 服务器租用 IP 地址的时间, DhcpEnabled=TRUE 时有 效LeaseExpires As Long 向 DHCP 服务器租用 IP 地址到期时间, DhcpEnabled=TRUE 时有效End Type IP_ADDR_STR
7、ING 描述 IP 地址链表的节点。Type IP_ADDR_STRINGNext As Long 指向列表中下一个 IP_ADDR_STRING 类型。为空,则是最后一个地址IpAddress As String * 16 点式十进制字串表示 Ip 地址IpMask As String * 16子网掩码Context As Long 网络 IP 地址标识,符合 AddIPAddress 和 DeleteIPAddress 函数中的网 接口关联参数。End Type3、使用到的常量:Const MAX_ADAPTER_NAME_LENGTH = 260/适配器名字长度Const MAX_ADA
8、PTER_ADDRESS_LENGTH = 8/适配器物理地址长度Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132/适配器描述长度4、主要代码分析: 调用函数 GetAdaptersInfo ,以及在调用中应该注意的问题:对函数 GetAdaptersInfo 进行 两次调用, 第一次调用获得参数 pOutBufLen 的实际大小; 第二次调用获取 IpAdapterInfo 的 数据。代码如下:pOutBufLen = 0error = GetAdaptersInfo(ByVal 0&, pOutBufLen)ReDim AdapterInfoBu
9、ffer(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 Un
10、til)来获得所有IP_ADAPTER_INFO 类型:DopAdapt = AdapterInfo.NextIf pAdapt <> 0 ThenCopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSizeEnd IfLoop Until pAdapt = 0 由每次获得的 IP_ADAPTER_INFO 类型来获取网络适配器物理地址:PhysicalAddress = ""For i = 0 To AdapterInfo.AddressLength - 1PhysicalAddress = PhysicalAdd
11、ress & Hex(AdapterInfo.Address(i)If i < AdapterInfo.AddressLength - 1 ThenPhysicalAddress = PhysicalAddress & "-"End IfNext 对于属于 IP_ADDR_STRING 类型的 IpAddressList 、 GatewayList 、 DhcpServer 、 PrimaryWinsServer、SecondaryWinsServer,同样要注意 IP_ADDR_STRING 中 Next 成员的 使用:DoCopyMemoryIP_
12、ADDR_STRING ,AdapterInfo.IpAddressList,LenB(IP_ADDR_STRING)Print "IP Address: " & IP_ADDR_STRING.IpAddressPrint "Subnet Mask: " & IP_ADDR_STRING .IpMaskpAddrStr = IP_ADDR_STRING .NextIf pAddrStr <> 0 ThenCopyMemory IP_ADDR_STRING .IpAddressList, ByVal pAddrStr, _Len
13、B(IP_ADDR_STRING .IpAddressList)End IfLoop Until pAddrStr = 05、运行时截图:第二节 获取 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:输入,输出指
14、定plfTable参数所占缓冲区的大小,如果缓冲区不是足够大返回接口表,函数设置这个参数等于所必须的缓冲区大小。bOrder: 输入指定返回的接口表是否按接口序号按上升顺序排列。如果参数为TRUE 那么按上升顺序排列。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型:MIB_IFTABLE包含接口表Private Type MIB_IFTABLEdwNumEntries As Long'当前网络接口的总数MIB_Table(9) As MIB_IFROW'指向一个包含 MIB_IFROW 类型的指针End TypeMIB_IFROW 保存接口信息Private Ty
15、pe MIB_IFROWwszName(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
16、 As Long'接口管理状态dwOperStatus As Long'操作状态,以下值之一:网络适配器被禁止, 例如: 地址冲突常量名称 值 说明1没有连接MIB_IF_OPER_STA TUS_NON_OPERATIONAL 0MIB_IF_OPER_STA TUS_UNREACHABLEMIB_IF_OPER_STA TUS_DISCONNECTED2 局域网:电缆未连接;广域网:无载波信号广域网适配器连接中广域网适配器连接上远程对等点局域网适配器默认状态MIB_IF_OPER_STA TUS_CONNECTING3MIB_IF_OPER_STA TUS_CONNECTE
17、D4MIB_IF_OPER_STA TUS_OPERATIONAL5dwLastChange As Long'操作状态最后改变的时间dwInOctets As Long'总共收到 (字节 )dwInUcastPkts As Long'总共收到 (unicast 包 )dwInNUcastPkts As Long'总共收到 (non-unicast 包 ),包括广播包和多点传送包dwInDiscards As Long'收到后丢弃包总数(即使没有错误)dwInErrors As Long'收到出错包总数dwInUnknownProtos As Lo
18、ng' 收到后因协议不明而丢弃的包总数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 部分有效长
19、度bDescr(0 To 255) As Byte'接口描述End Type3、使用到的常量:无4、主要代码分析:Dim ifT As MIB_IFTABLELenlfT = Len(ifT)RValue = GetlfTable(ifT, LenlfT, True) 由ifT.dwNumEntries获得接口数量,然后用fornext循环获取每个接口信息:For i = 0 To ifT.dwNumEntries - 1Print "接口编号: " & ifT.MlB_Table(i).dwlndexPrint "接口速度: " &am
20、p; ifT.MlB_Table(i).dwSpeedNext 物理地址的获得:PhysAddr = Right("00" & Hex(ifT.MlB_Table(i).bPhysAddr(0), 2)For j = 1 To 5PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MlB_Table(i).bPhysAddr(j), 2)NextPrint "物理地址: " & PhysAddr5、运行时截图:第三节 获取本机 T
21、CP 信息列表1、函数:AsPrivate Declare Function GetTcpStatistics Lib "iphlpapi.dll" (ByRef pTcpStats MlB_TCPSTATS) As Long参数说明:pStats :输出 指向一个接收本机TCP统计表的 MIB_TCPSTA TS类型返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_TCPSTATS包含本机上正运行的TCP协议的统计表Type MIB_TCPSTATSdwRtoAlgorithm As Long指定重传输 (RTO: retransmission ti
22、me-out) 算法dwRtoMin As Long重传输超时的最小值,毫秒dwRtoMax As Long重传输超时的最大值,毫秒dwMaxConn As Long连接最大数目,如果为 -1,则连接的最大数目是可变的dwActiveOpens As Long主动连接数目,即客户端正向服务器进行连接数目dwPassiveOpens As Long被动连接数目,即服务器监听连接客户端请求数目dwAttemptFails As Long尝试连接失败的次数dwEstabResets As Long对已建立的连接实行重设的次数dwCurrEstab As Long目前已建立的连接dwInSegs As
23、 Long收到分段数据报的数目dwOutSegs As Long传输的分段数据报数目,不包括转发的数据包dwRetransSegs As Long转发的分段数据报数目dwInErrs As Long收到错误的数目dwOutRsts As Long重设标志设定后传输分段数据报数目dwNumConns As Long累计连接的总数End Type3、使用到的常量:无4、主要代码分析: 定义一个 MIB_TCPSTA TS 类型变量,然后直接调用 GetTcpStatistics :Dim mTcpS As MIB_TCPSTA TSRValue = GetTcpStatistics(mTcpS)5
24、、运行时截图:第四节 获取当前 TCP 连接情况1、函数:Private Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long参数说明:pTcpTable: 输入 指向包含了 MIB_TCPTABLE 类型的 TCP 连接表。pdwSize: 输入,输出 指向 pTcpTable 参数的缓冲区大小,如果分配的缓冲不够,那么就等 于最小需要缓冲。bOrder:输入
25、指定连接表是否按照类型排列。TRUE ,那么就按以下类型顺序排列:Local IPaddress, Local port , Remote IP address, Remote port 。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_TCPTABLE 类型包含Tcp连接表。Type MIB_TCPTABLEdwNum_Of_Entries As Long当前包含 MIB_TCPROW 类型的总数TCP_Table() As MIB_TCPROW指向包含 MIB_TCPROW 类型的指针End Type备注:实际使用中可以定义: TCP_Table(120) As M
26、IB_TCPROW' 预留足够缓存 MIB_TCPROW 类型包含了 TCP连接信息。Type MIB_TCPROWdwState As Long' TCP 连接状态,为以下值之一:常量名称MIB_TCP_STA TE_CLOSEDMIB_TCP_STA TE_LISTENMIB_TCP_STA TE_SYN_SENTMIB_TCP_STA TE_SYN_RCVDMIB_TCP_STA TE_ESTABMIB_TCP_STA TE_FIN_WAIT1MIB_TCP_STA TE_FIN_WAIT2MIB_TCP_STA TE_CLOSE_WAITMIB_TCP_STA TE_C
27、LOSING值说明1关闭2正在监听3同步发送4同步接收5已建立6FINWAIT 17FINWAIT 28关闭等待9正在关闭最后一次确认MIB_TCP_STA TE_LAST_ACK10删除连接MIB_TCP_STA TE_DELETE_TCB 12dwLocalAddr As Long'本地 IPdwLocalPort As Long'本地端口dwRemoteAddr As Long'远程机器 IPdwRemotePort As Long'远程机器端口End Type3、使用到的常量:无4、主要代码分析:定义一个 MIB_TCPTABLE 类型的变量, 因为我们
28、在定义 MIB_TCPTABLE 类型的时候预 留了足够的缓存 ( TCP_Table(120) As MIB_TCPROW ) ,因此获得定义变量的大小后直接调用GetTcpTable,但是要注意的是,实际获得的TCP连接的总数应为 dwNum_Of_Entries的值,一般小于我们的定义( 120):Dim mtcp As MIB_TCPTABLEmtcplen = Len(mtcp)rvalue = GetTcpTable(mtcp, mtcplen, True) 使用ForNext循环遍历各个 Tcp连接的信息:Print mtcp.TCP_Table(i).dwLocalAddr &
29、amp; "->" & mtcp.TCP_Table(i).dwRemoteAddrNext 因为 MIB_TCPROW 类型中 dwLocalAddr 、dwRemoteAddr 均为一长整型数,因此要通过 转换来获得 IP 地址:Dim Ip_Buf(1 To 4) As ByteCopyMemory Ip_Buf(1), dwLocalAddr, 4GetIp = CStr(Ip_Buf(1) + "." + CStr(Ip_Buf(2) + "." + CStr(Ip_Buf(3) + "."
30、 + CStr(Ip_Buf(4) 因为 MIB_TCPROW 类型中 dwLocalPort 、dwRemotePort 均为一长整型数, 因此要通过转 换来获得端口:GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 2565、运行时截图:第五节 获取本机 UDP 信息列表1、函数:Private Declare Function GetUdpStatistics Lib "iphlpapi.dll" (pStats As MIB_UDPSTATS) As Long参数说明:pStats: 输出指向一个接收到本机 U
31、DP 统计表的 MIB_UDPSTA TS 类型返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_UDPSTATS 包含 UDP (User Datagram Protocol)运行信息Type MIB_UDPSTATSdwInDatagrams As Long'已收到数据报数目dwNoPorts As Long'因为端口号有误而丢弃的数据报数目dwInErrors As Long'已收到多少错误数据报,不包括dwNoPorts 中统计的数目dwOutDatagrams As Long'已传输数据报数目dwNumAddrs As Long&
32、#39;UDP 监听者表中接口数目End Type3、使用到的常量:无4、主要代码分析:定义一个 MIB_UDPSTA TS 类型的变量,然后直接使用 GetUdpStatistics 函数即可:Dim Mudp As MIB_UDPSTATS r = GetUdpStatistics(Mudp)5、运行时截图:第六节 获取当前 UDP 连接情况1、函数:Private Declare Function GetUdpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_UDPTABLE, ByRef pdwSize As Long
33、, ByVal bOrder As Long) As Long参数说明:pUdpTable: 输出 指向一个缓存作为 MIB_UDPTABLE 类型用来接收 UDP 监听表。pdwSize:输入或输出输入,指定pUdpTable参数所占缓存大小; 输出,如果指定的缓存大 小不足,将设置为所须的大小。bOrder: 输入指定返回的表是否按分类排列。 如果为 TRUE ,按以下分类排列: 1、IP 地址;2、端口。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_UDPTABLE 包含 MIB_UDPROW 类型Type MIB_UDPTABLEdwNum_Of_Entrie
34、s As Long'当前 UDP 连接的总数UDP_Table() As MIB_UDPROW'指向包含 MIB_UDPROW 类型的指针预留足够缓存End Type备注:实际使用中可以定义:UDP_Table(120) As MIB_UDPROW MIB UDPROW 包含发送和接收UDP 数据包的地址信息。它的格式如下:Type MIB_UDPROWdwLocalAddr As Long'本地 IPdwLocalPort As Long'本地端口End Type3、使用到的常量:4、主要代码分析:定义一个 MIB_TCPTABLE 类型的变量, 因为我们在定
35、义 MIB_TCPTABLE 类型的时候预 留了足够的缓存 ( TCP_Table(120) As MIB_TCPROW ) ,因此获得定义变量的大小后直接调用GetTcpTable。但是要注意的是,实际获得的UDP连接的总数应为 dwNum_Of_Entries的值,一般小于我们的定义( 120):Dim Mudp As MIB_UDPTABLEmudplen = Len(Mudp)rvalue = GetUdpTable(Mudp, mudplen, True) 使用ForNext循环遍历各个 Tcp连接的信息:For i = 0 To Mudp.dwNum_Of_Entries - 1P
36、rintMudp.UDP_Table(i).dwLocalAddr&":"&Mudp.UDP_Table(i).dwLocalPortNext 因为 MIB_UDPTABLE 类型中 dwLocalAddr 为一长整型数, 因此要通过转换来获得 IP 地 址:Dim Ip_Buf(1 To 4) As ByteCopyMemory Ip_Buf(1), dwLocalAddr, 4GetIp = CStr(Ip_Buf(1) + "." + CStr(Ip_Buf(2) + "." + CStr(Ip_Buf(3) +
37、 "." + CStr(Ip_Buf(4) 因为 MIB_UDPTABLE 类型中 dwLocalPort 为一长整型数,因此要通过转换来获得端口:GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 2565、运行时截图:第七节 获取本机网间控制报文协议( ICMP : Internet Control Message Protocol )信息1、函数:Private Declare Function GetIcmpStatistics Lib "iphlpapi.dll" (pStats As MI
38、B_ICMP) As Long 参数说明:pStats:输出指向一个本机收到 ICMP统计表的 MIB_ICMP类型。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_ICMP 为特殊适配器包含网间控制报文协议(ICMP : Internet Control MessageProtocol )统计表。Public Type MIB_ICMPstats As MIBICMPINFO '指定 MIBICMPINFO 类型包含了电脑 ICMP 统计信息表End Type MIBICMPINFO 通过 MIBICMPSTA TS结构存储的接收或发出的ICMP信息。Publ
39、ic Type MIBICMPINFOicmpInStats As MIBICMPSTA TS'指向 MIBICMPSTA TS 类型,包含接收数据icmpOutStats As MIBICMPSTATS '指向 MIBICMPSTA TS 类型,包含发出数据End Type MIBICMPSTATS 包含 ICMP (Internet Control Message Protocol)接收或发出的统计信息。Public Type MIBICMPSTATSdwDestUnreachs As Long'已收发多少 "目标不可抵达 " 消息dwTimeE
40、xcds As Long'已收发多少生存期已过消息dwParmProbs As Long'已收发多少表明数据报有错误 IP 信息的消息dwSrcQuenchs As Long'已收发多少源结束消息dwRedirects As Long'已收发多少重定向消息dwEchos As Long'已收发多少 ICMP 响应请求dwEchoReps As Long'已收发多少 ICMP 响应应答dwTimestamps As Long'已收发多少时间戳请求dwTimestampReps As Long'已收发多少时间戳响应dwAddrMask
41、s As Long'已收发多少地址掩码dwAddrMaskReps As Long '已收发多少地址掩码响应End Type3、使用到的常量:无4、主要代码分析: 定义一个 MIB_ICMP 类型的变量,然后直接调用 GetIcmpStatistics :Dim Micmp As MIB_ICMP r = GetIcmpStatistics(Micmp)使用 Micmp.stats.icmpInStats 成员获取收到的数据信息;使用 Micmp.stats.icmpOutStats 成员获取发送的数据信息。5、运行时截图:第八节 获取本机网络参数1、函数:Private De
42、clare Function GetNetworkParams Lib "IPHlpApi.dll" (FixedInfo As Any, pOutBufLenAs Long) As Long参数说明:pFixedInfo : 输出 指向一个接收本机网络参数的数据块。pOutBufLen : 输入,输出 指向一个 ULONG 变量,改变量指定了 FixedInfo 参数的大小。 如果指定的大小不够大, 将设置为须要的大小并返回 ERROR_BUFFER_OVERFLOW 错误。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: IP_ADDR_STRING 描述
43、IP地址链表的节点。见 第二章 第一节 2 FIXED_INFO包含电脑网络参数信息Type FIXED_INFOHostName As String * MAX_HOSTNAME_LEN本机名DomainName As String * MAX_DOMAIN_NAME_LEN本机 DNS 域CurrentDnsServer As Long址保留,使用 DnsServerList 获取 DNS 服务器的 IP 地DnsServerList As IP_ADDR_STRING 本机采用的 DNS 服务器链表节点类型,以下值:NodeType As Long1 BROADCAST_NODETYPE
44、2 PEER_TO_PEER_NODETYPE4 MIXED_NODETYPE8 HYBRID_NODETYPEElseScopeId As String * MAX_SCOPE_ID_LENEnableRouting As LongEnableProxy As LongEnableDns As LongIP 广播, b 节点 NetBIOS 名字解析法 点到点通信, p 节点名字解析 Mixed , m 节点 NetBIOS 名字解析法Hybrid , h节点NetBIOS名字解析法未知节点类型DHCP 围名字本机能否路由本机能否作为地址解析协议(本机能否 DNS 查询ARP )代理End
45、Type备注:此类型在 vb 中和 c 中的定义有所不同,详情请参看MSDN 。3、使用到的常量:Const MAX_HOSTNAME_LEN = 132Const MAX_DOMAIN_NAME_LEN = 132Const MAX_SCOPE_ID_LEN = 2604、主要代码分析:由于 IP_ADDR_STRING 的实际大小未知,我们不能直接获取其大小,所以首先对函数 GetNetworkParams 进行两次调用,第一次调用获得参数 pOutBufLen 的实际大小;第二次调 用获取 FixedInfoBuffer(0) 的数据。代码如下:Dim FixedInfoBuffer()
46、 As ByteFixedInfoSize = 0rvalue = GetNetworkParams(ByVal 0, FixedInfoSize)ReDim FixedInfoBuffer(FixedInfoSize - 1)rvalue = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)使用 copymemory 函数将数据拷贝到 FixedInfo 中,然后就可以使用CopyMemory FixedInfo, FixedInfoBuffer(0), FixedInfoSizePrint "Host Name",
47、FixedInfo.HostName 采用 Do 循环来获取所有 DNS 服务器地址:Print "DnsServer IP", FixedInfo.DnsServerList.IpAddress pAddrStr = Do While pAddrStr <> 0CopyMemory IPAS, ByVal pAddrStr, LenB(IPAS)Print "DNSServer IP", IPAS.IpAddresspAddrStr = IPAS.NextLoop5、运行时截图:第九节 获取网卡-IP地址映射表1、函数:FIXED_INFO
48、 结构了:(pIpAddrTable AsPrivate Declare Function GetIpAddrTable Lib "iphlpapi.dll" MIB_IPADDRTABLE, pdwSize As Long, bOrder As Long) As Long参数说明:pIpAddrTable :输出指向一个接收网卡-IP地址映射表的 针。MIB_IPADDRTABLE 类型的指pdwSize: 输入,输出 输入,指定 pIpAddrTable 参数指向缓存的大小;输出,如果指定的 缓存大小不够大,将设置此参数为必须的大小。bOrder:输入指定返回的映射表是
49、否按照IP地址排列。TRUE,按顺序排列。返回值:成功,返回 0;失败,返回错误代码。2、使用到的类型: MIB_IPADDRTABLE 包含IP地址入口表Type MIB_IPADDRTABLEdwNumEntries As Long'表明 table 字段数组中有多少 MIB_IPADDROW条目table() As MIB_IPADDRROW'指向 MIB_IPADDRROW 类型End Type MIB_IPADDRROW 指定特殊IP地址的信息Type MIB_IPADDRROWdwAddr As Long'接口的 IP 地址dwIndex As Long与I
50、P地址关联的接口之索引dwMask As Long'子网掩码dwBCastAddr As Long'广播地址dwReasmSize As Long ' 已收到的数据报重装后的最大长度unused1 As Integer '未使用End Type3、使用到的常量:无4、主要代码分析:定义一个 MIB_IPADDRTABLE 类型的变量并获 取此变量 的大小 ,然后 直接调 用 GetTcpTable:Dim IpAddrTable As MIB_IPADDRTABLEdwsize = Len(IpAddrTable)r = GetIpAddrTable(IpAdd
51、rTable, dwsize, order) 调用ForNext循环,获取每个网卡-IP地址映射的信息:For i = 0 To IpAddrTable.dwNumEntries - 1Print "dwAddr", IpAddrTable.table(i).dwAddrNext 将长整型格式的ip 地址转换为标准 IP 地址格式( "xxx.xxx.xxx.xxx" 格式):Private Function inversaip(IPAddrLng As Long) As StringDim sos As StringDim i As LongDim I
52、Padd As StringIPadd = Right("00000000" & Hex(IPAddrLng), 8)sos =nilFor i = 1 To Len(IPadd) Step 2sos = CInt("&h" & Mid(IPadd, i, 2) & "." & sosNext iinversaip = Mid(sos, 1, Len(sos) - 1)End Function5、运行时截图:第十节 获取本机已探测的IP -物理地址映射表1、函数:Private Declare
53、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 ,按序排列。
54、 返回值:成功,返回0;失败,返回错误代码。2、使用到的类型:MIB_IPNETTABLE包含地址解析协议 (ARP : Address Resolution Protocol)接口入口表。Type MIB_IPNETTABLEDwNumEntries As Long MIB_IPNETROW 类型的总数MIB_Table() As MIB_IPNETROW 针End Type当前包含指向一个包含 MIB_IPNETROW 类型的指:Address Resolution Protocol )接口信息:(字节 ) ,通常为 6bPhysAddr(MAXLEN_PHYSADDR) As Byte
55、dwAddr As Long dwType As Long常量名称MIB_IPNET_TYPE_OTHERMIB_IPNET_TYPE_INV ALIDMIB_IPNET_TYPE_DYNAMICMIB_IPNET_TYPE_STA TIC'IP 地址'ARP 接口的类型,以下值之一:值说明1其他条目2无效条目3动态条目4静态条目'字节数组,包含适配器的物理地址MIB_IPNETROW 包含地址解析协议(ARPType MIB_IPNETROWdwIndex As Long'指定适配器的索引dwPhysAddrLen As Long 'bPhysAddr
56、s 字段包含的物理接口的长度End Type3、使用到的常量:Const MAXLEN_PHYSADDR = 74、主要代码分析: 定义一 个 MIB_IPNETTABLE 类型 的变量 并获取此变量的大小,然后 直接调 用 GetIpNetTable :Dim ipNett As MIB_IPNETTABLEdwsize = Len(ipNett)r = GetIpNetTable(ipNett, dwsize, bOrder) 调用ForNext循环,获取每个网卡-IP地址映射的信息:For i = 0 To ipNett.dwNumEntries - 1Print "类型&qu
57、ot;, ipNett.MIB_Table(i).dwTypeNext 在中循环获取物理地址:ByteToS = ""ByteToS = Right("00" & Hex(ipNett.MIB_Table(i).bPhysAddr(0), 2)For j = 1 To ipNett.MIB_Table(i).dwPhysAddrLen - 1 Step 1ByteToS = 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国芹菜香草油行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国素食奶酪行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国移动应用液压设备行业市场现状供需分析及投资评估规划分析研究报告
- 文山职业技术学院《书写技能训练》2023-2024学年第二学期期末试卷
- 江南影视艺术职业学院《微机控制技术课程实训》2023-2024学年第二学期期末试卷
- 武汉警官职业学院《外科学2》2023-2024学年第二学期期末试卷
- 云南现代职业技术学院《数据挖掘B》2023-2024学年第二学期期末试卷
- 遵义师范学院《金融学理论教学》2023-2024学年第二学期期末试卷
- 广西物流职业技术学院《环境设计标准与实务》2023-2024学年第二学期期末试卷
- 江苏电子信息职业学院《专业及科技论文写作》2023-2024学年第二学期期末试卷
- JTT663-2006 公路桥梁板式橡胶支座规格系列
- 电缆管廊敷设施工方案及流程
- 中风的早期识别和急救处理方法
- pets5历年真题(口语)
- 高速公路投诉培训课件
- 《天然药物化学》课程标准
- 提升问题解决能力的培训
- 消防工程投标方案技术标
- 村民心理知识知识讲座
- 管工基础知识培训课件
- 软件项目投标技术方案
评论
0/150
提交评论