vb.net 第十六节 获取本机IP 路由表 GetIpForwardTable
Posted VB.Net
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net 第十六节 获取本机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 教程 目录
以上是关于vb.net 第十六节 获取本机IP 路由表 GetIpForwardTable的主要内容,如果未能解决你的问题,请参考以下文章