ネットワークインターフェース一覧の取得          <TOP>


ネットワークインターフェース一覧を取得します。

CopyMemory メモリブロックの移動

GetIpAddrTable ネットワークインターフェース一覧の取得(Windows98以降)

 

 

'================================================================
'= ネットワークインターフェース一覧の取得
'=    (GetIpAddrTable.bas)
'================================================================
#include "Windows.bi"

#define MAX_IP 4               'とりあえず5個以内のIPアドレスを想定

Type IPINFO
    dwAddr      As Long        'IP アドレス
    dwIndex     As Long        'インタフェースインデックス
    dwMask      As Long        'IPアドレスのうちネットワークアドレスとホストアドレスを識別するための数値
    dwBCastAddr As Long        'ネットワーク内のすべての端末にデータを送信するために使われる特殊なアドレス
    dwReasmSize As Long        'アセンブリサイズ
    unused1     As Integer     '未使用
    unused2     As Integer     '未使用
End Type

Type MIB_IPADDRTABLE
    dEntrys         As Long    'エントリ数
    mIPInfo(MAX_IP) As IPINFO  'IPアドレスエントリーの配列
End Type

Type IP_Array
    mBuffer   As MIB_IPADDRTABLE
    BufferLen As Long
End Type

' ある位置から別の位置にメモリブロックを移動する関数の宣言
Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length&)

' ネットワークインターフェース一覧の取得
Declare Function Api_GetIpAddrTable& Lib "Iphlpapi" Alias "GetIpAddrTable" (pIPAdrTable As Byte, pdwSize&, ByVal Sort&)

Var Shared List1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 12

'================================================================
'=
'================================================================
Declare Function ConvertAddressToString(longAddr As Long) As String
Function ConvertAddressToString(longAddr As Long) As String
    Var myByte(3) As Byte
    Var Str As String
    Var Cnt As Long

    CopyMemory myByte(0), longAddr, 4

    For Cnt = 0 To 3
        Str = Str & Right$("   " + Str$(myByte(Cnt)), 3) & "."
    Next Cnt

    Str = Left$(Str, Len(Str) - 1)
    ConvertAddressToString = Str
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var ip As Long
    Var mi As MIB_IPADDRTABLE
    Var Ret As Long

    Ret = Api_GetIpAddrTable(ByVal 0, Ret, True)

    If Ret <= 0 Then Exit Sub

    Var bBytes(Ret - 1) As Byte

    Ret = Api_GetIpAddrTable(bBytes(0), Ret, False)
      
    CopyMemory mi.dEntrys, bBytes(0), 4

    List1.Resetcontent
    List1.AddString Str$(mi.dEntrys) & " IP Address が見つかりました!"
    List1.AddString "-------------------------------------------"
    For ip = 0 To mi.dEntrys - 1
        CopyMemory mi.mIPInfo(ip), bBytes(4 + (ip * Len(mi.mIPInfo(0)))), Len(mi.mIPInfo(ip))
        List1.AddString "IP Address           : " & ConvertAddressToString(mi.mIPInfo(ip).dwAddr)
        List1.AddString "IP Subnetmask        : " & ConvertAddressToString(mi.mIPInfo(ip).dwMask) 
        List1.AddString "BroadCast IP Address : " & ConvertAddressToString(mi.mIPInfo(ip).dwBCastAddr) 
        List1.AddString "-------------------------------------------"
    Next
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End