※==================================================================
※本连载文章说明:
※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 GetIpAddrTable Lib "iphlpapi.dll" (pIpAddrTable As MIB_IPADDRTABLE, pdwSize As Long, bOrder As Long) As Long
参数说明:
pIpAddrTable:[输出] 指向一个接收网卡–IP地址映射表的 MIB_IPADDRTABLE类型的指针。
pdwSize:[输入,输出]输入,指定pIpAddrTable 参数指向缓存的大小;输出,如果指定的缓存大小不够大,将设置此参数为必须的大小。
bOrder:[输入] 指定返回的映射表是否按照IP地址排列。TRUE,按顺序排列。
返回值:成功,返回0;失败,返回错误代码。
2、使用到的类型:
①MIB_IPADDRTABLE 包含IP地址入口表
Type MIB_IPADDRTABLE
dwNumEntries As Long '表明table字段数组中有多少MIB_IPADDROW条目
table() As MIB_IPADDRROW '指向MIB_IPADDRROW类型
End Type
②MIB_IPADDRROW 指定特殊IP地址的信息
Type MIB_IPADDRROW
dwAddr As Long '接口的IP地址
dwIndex As Long '与IP地址关联的接口之索引
dwMask As Long '子网掩码
dwBCastAddr As Long ’广播地址
dwReasmSize As Long '已收到的数据报重装后的最大长度
unused1 As Integer '未使用
unused2 As Integer '未使用
End Type
3、使用到的常量:
无
4、主要代码分析:
①定义一个MIB_IPADDRTABLE类型的变量并获取此变量的大小,然后直接调用GetTcpTable:
Dim IpAddrTable As MIB_IPADDRTABLE
dwsize = Len(IpAddrTable)
r = GetIpAddrTable(IpAddrTable, dwsize, order)
②调用For…Next循环,获取每个网卡–IP地址映射的信息:
For i = 0 To IpAddrTable.dwNumEntries - 1
Print "dwAddr", IpAddrTable.table(i).dwAddr
Next
③将长整型格式的ip地址转换为标准IP地址格式("xxx.xxx.xxx.xxx"格式):
Private Function inversaip(IPAddrLng As Long) As String
Dim sos As String
Dim i As Long
Dim IPadd As String
IPadd = Right("00000000" & Hex(IPAddrLng), 8)
sos = ""
For i = 1 To Len(IPadd) Step 2
sos = CInt("&h" & Mid(IPadd, i, 2)) & "." & sos
Next i
inversaip = Mid(sos, 1, Len(sos) - 1)
End Function
5、运行时截图:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450378.aspx