在vb中使用Iphlpapi.dll获取网络信息 第二章 第十六节 获取本机IP 路由表

※==================================================================
※本连载文章说明:
※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 GetIpForwardTable Lib "iphlpapi.dll" (pIpForwardTable As MIB_IPFORWARDTABLE , pdwSize As Long, bOrder As Long) As Long

参数说明:

pIpForwardTable:[输出]指向接收IP路由表作为MIB_IPFORWARDTABLE类型的缓存

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

bOrder:[输入] 指定返回的映射表是否按照种类排列。TRUE,按以下顺序排列:目的地地址;生成路由的协议;多路径路由策略;下一跃点的地址。

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

 

2、使用到的类型:

①MIB_IPFORWARDTABLE 包含了IP路由表接口。

Type MIB_IPFORWARDTABLE

    dwNumEntries As Long                            '表中路由接口数目

    Table(120) As MIB_IPFORWARDROW      '指向MIB_IPFORWARDROW类型阵列

End Type

 

②MIB_IPFORWARDROW 包含描述IP网络路由的信息

public type MIB_IPFORWARDROW 

       dwForwardDest as long      '目的地IP地址

       dwForwardMask as long     '目的地主机的子网掩码

       dwForwardPolicy as long    '将会引起多通道路由选择的设置条件。参看RFC 1354。

       dwForwardNextHop as long        '路由器中IP地址的下一个跃点

       dwForwardIfIndex as long         '路由的接口序号

       dwForwardType as long      'RFC 1354中路由的定义,以下值之一: 

常量名称
 值
 说明
 
MIB_IPROUTE_TYPE_OTHER
 1
 其他
 
MIB_IPROUTE_TYPE_INVALID
 2
 非法路由
 
MIB_IPROUTE_TYPE_DIRECT
 3
 下一个跃点是目的地(本地路由)
 
MIB_IPROUTE_TYPE_INDIRECT
 4
 下一个跃点不是目的地 (远程路由)
 

       dwForwardProto as long  '生成路由的协议,具体IPX协议值参看Routprot.h,而IP条目参看Iprtrmib.h

       dwForwardAge as long  '路由持续时间,毫秒。仅用于路由远程访问服务(RRAS:Routing and Remote Access Service)运行时候,并且仅当路由类型为PROTO_IP_NETMGMT。

       dwForwardNextHopAS as long  '下一跃点的自治系统编号

       dwForwardMetric1 as long  '路由协议专有的公制值。详情参见RFC 1354。

       dwForwardMetric2 as long  '路由协议专有的公制值。详情参见RFC 1354。

       dwForwardMetric3 as long  '路由协议专有的公制值。详情参见RFC 1354。

       dwForwardMetric4 as long  '路由协议专有的公制值。详情参见RFC 1354。

       dwForwardMetric5 as long  '路由协议专有的公制值。详情参见RFC 1354。

End Type

 

3、使用到的常量:

 

4、主要代码分析:

①定义一个MIB_IPFORWARDTABLE类型的变量,对函数GetIpForwardTable进行两次调用,第一次调用获得参数pdwSize的实际大小;第二次调用获取pIpForwardTable数据:

Dim mIF As MIB_IPFORWARDTABLE

r = GetIpForwardTable(mIF, dwsize, order)

r = GetIpForwardTable(mIF, dwsize, order)

②调用For…Next循环,获取每个路由的信息:

For i = 0 To mIF.dwNumEntries - 1

           Realip = inversaip(mIF.table(i).dwForwardDest)

           RealMask = inversaip(mIF.table(i).dwForwardMask)

           Print "ip", Realip

           Print "mask", RealMask

Next

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

Private Function inversaip(IPAddrLng As Long) As String

       ‘同本章第九节 4  ③

End Function

 

5、运行时截图


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值