第十六节 获取本机IP 路由表 GetIpForwardTable

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

Imports System.Runtime.InteropServices

Public Class Form17

    '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

    <StructLayout(LayoutKind.Sequential)>
    Public Structure MIB_IPFORWARDTABLE
        Public dwNumEntries As Integer                 '表中路由接口数目
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=120)> Public Table() As MIB_IPFORWARDROW   '指向MIB_IPFORWARDROW类型阵列
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Public Structure MIB_IPFORWARDROW
        Public dwForwardDest As Integer     '目的地IP地址
        Public dwForwardMask As Integer    '目的地主机的子网掩码
        Public dwForwardPolicy As Integer      '将会引起多通道路由选择的设置条件。参看RFC 1354。
        Public dwForwardNextHop As Integer     '路由器中IP地址的下一个跃点
        Public dwForwardIfIndex As Integer   '路由的接口序号
        Public dwForwardType As Integer    'RFC 1354中路由的定义,以下值之一:	
        Public dwForwardProto As Integer  '生成路由的协议,具体IPX协议值参看Routprot.h,而IP条目参看Iprtrmib.h
        Public dwForwardAge As Integer  '路由持续时间,毫秒。仅用于路由远程访问服务(RRAS:Routing and Remote Access Service)运行时候,并且仅当路由类型为PROTO_IP_NETMGMT。
        Public dwForwardNextHopAS As Integer  '下一跃点的自治系统编号
        Public dwForwardMetric1 As Integer  '路由协议专有的公制值。详情参见RFC 1354。
        Public dwForwardMetric2 As Integer  '路由协议专有的公制值。详情参见RFC 1354。
        Public dwForwardMetric3 As Integer  '路由协议专有的公制值。详情参见RFC 1354。
        Public dwForwardMetric4 As Integer  '路由协议专有的公制值。详情参见RFC 1354。
        Public dwForwardMetric5 As Integer  '路由协议专有的公制值。详情参见RFC 1354。
    End Structure

    'Public Declare Function GetIpForwardTable Lib "iphlpapi.dll" (pIpForwardTable As MIB_IPFORWARDTABLE, pdwSize As Long, bOrder As Long) As Long

    Public Declare Function GetIpForwardTable Lib "iphlpapi.dll" (ByRef pIpForwardTable As IntPtr, ByRef pdwSize As Integer, ByVal bOrder As Integer) As Integer
    Public Declare Function GetIpForwardTable Lib "iphlpapi.dll" (ByRef pIpForwardTable As MIB_IPFORWARDTABLE, ByRef pdwSize As Integer, ByVal bOrder As Integer) As Integer

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim pIpForwardTable As IntPtr = IntPtr.Zero
        Dim pdwSize As Integer

        Dim returnValue As Integer
        returnValue = GetIpForwardTable(pIpForwardTable, pdwSize, True)

        Dim IpForwardTable As New MIB_IPFORWARDTABLE
        returnValue = GetIpForwardTable(IpForwardTable, pdwSize, True)

        For i As Integer = 0 To IpForwardTable.dwNumEntries - 1
            TextBox1.Text &= "==========" & vbCrLf
            TextBox1.Text &= IntToIP(IpForwardTable.Table(i).dwForwardDest) & vbCrLf
            TextBox1.Text &= IntToIP(IpForwardTable.Table(i).dwForwardMask) & vbCrLf
        Next

    End Sub

    Private Function IntToIP(ByVal intAddr As Integer) As String
        Dim bteIp() As Byte
        bteIp = BitConverter.GetBytes(intAddr)
        Dim ip As String = ""
        For i As Integer = 0 To bteIp.Length - 1
            ip &= bteIp(i).ToString & "."
        Next

        Return ip.Substring(0, ip.Length - 1)
    End Function
End Class

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看 vb.net 教程 目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值