vb.net 第十二节 获得本机系统网络接口适配器的列表 GetInterfaceInfo

Posted VB.Net

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net 第十二节 获得本机系统网络接口适配器的列表 GetInterfaceInfo相关的知识,希望对你有一定的参考价值。

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

Imports System.Runtime.InteropServices

Public Class Form13
    'typedef struct _IP_INTERFACE_INFO 
    '  Long NumAdapters; 
    '  IP_ADAPTER_INDEX_MAP Adapter[1]; 
    ' IP_INTERFACE_INFO, *PIP_INTERFACE_INFO;

    'typedef struct _IP_ADAPTER_INDEX_MAP 
    '  ULong Index; 
    '  WCHAR Name[MAX_ADAPTER_NAME]; 
    ' IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;


    'Public Type IP_INTERFACE_INFO
    '    NumAdapters As Long     		'适配器编号
    '    Adapter(1) As IP_ADAPTER_INDEX_MAP     'IP_ADAPTER_INDEX_MAP类型的数组
    'End Type

    'Public Type IP_ADAPTER_INDEX_MAP
    '    Index As Long       '和适配器关联的接口序号
    '    Name As String * MAX_ADAPTER_NAME_LENGTH       '指向一个包含了适配器名称的Unicode字符串
    'End Type

    Const MAX_ADAPTER_NAME_LENGTH = 256

    <StructLayout(LayoutKind.Sequential)>
    Public Structure IP_INTERFACE_INFO
        Public NumAdapters As Integer          '适配器编号
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public Adapter() As IP_ADAPTER_INDEX_MAP     'IP_ADAPTER_INDEX_MAP类型的数组
    End Structure

    <StructLayout(LayoutKind.Sequential)>
    Public Structure IP_ADAPTER_INDEX_MAP
        Public Index As Integer       '和适配器关联的接口序号
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=MAX_ADAPTER_NAME_LENGTH)> Public Name() As Char        '指向一个包含了适配器名称的Unicode字符串
    End Structure

    'DWORD GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen );

    'Private Declare Function GetInterfaceInfo Lib "iphlpapi.dll" (pIfTable As IP_INTERFACE_INFO, dwOutBufLen As Long) As Long
    Private Declare Function GetInterfaceInfo Lib "iphlpapi.dll" (ByRef pIfTable As IntPtr, ByRef dwOutBufLen As Integer) As Integer
    Private Declare Function GetInterfaceInfo Lib "iphlpapi.dll" (ByRef pIfTable As IP_INTERFACE_INFO, ByRef dwOutBufLen As Integer) As Integer

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

        Dim returnValue As Integer
        '第一次调用,返回122:ERROR_INSUFFICIENT_BUFFER,缓冲区大小不足
        'pdwSize参数返回实际需要的字节大小
        returnValue = GetInterfaceInfo(pIfTable, dwOutBufLen)

        Dim bufIfTable(dwOutBufLen - 1) As Byte
        '分配内存
        'ptrMibf = Marshal.AllocHGlobal(lenIft)

        Dim IPINTERFACEINFO As New IP_INTERFACE_INFO
        '第二次调用获得数据
        returnValue = GetInterfaceInfo(IPINTERFACEINFO, dwOutBufLen)

        TextBox1.Text = New String(IPINTERFACEINFO.Adapter(0).Name).Replace(Chr(0), "")


    End Sub
End Class

 

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

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

以上是关于vb.net 第十二节 获得本机系统网络接口适配器的列表 GetInterfaceInfo的主要内容,如果未能解决你的问题,请参考以下文章

第十二节,卷积神经网络

vb.net 第一节 获取本机网络适配器的信息 GetAdaptersInfo

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

《小迪网络安全笔记》 第十二节:WEB漏洞-SQL注入之简要SQL注入

《树莓派项目实战》第十二节 使用PCA9685驱动板控制多个舵机

《树莓派项目实战》第十二节 使用PCA9685驱动板控制多个舵机