Rem 測試目前設備上所使用的 IP 地址
Rem 設定在您的計算機上﹐最多可能使用 10 組 IP 地址﹐并且用來產生緩存區
Private Const MAX_IP = 10
Private Type IPINFO
dwAddr As Long 'IP地址
dwNICIndex As Long 'NIC界面
dwSubnetMask As Long '子網掩碼
dwBroadCastAddr As Long '廣播地址
dwReAssemblySize As Long '組大小
unused1 As Integer '暫不使用
unused2 As Integer '暫不使用
End Type
Private Type MIB_IPADDRTABLE
dwEntrys As Long '窗體中登錄的數目
arIPInfo(MAX_IP) As IPINFO 'IP地址隊列
End Type
Private Type IP_Array
mBuffer As MIB_IPADDRTABLE 'IP地址清單
BufferLen As Long ' 緩存區大小
End Type
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long
' 將長整數轉換為字符串
Public Function ConvertAddr2Str(LongAddress As Long) As String
Dim addrByte(3) As Byte
Dim Cnt As Long
CopyMemory addrByte(0), LongAddress, 4
For Cnt = 0 To 3
ConvertAddr2Str = ConvertAddr2Str + CStr(addrByte(Cnt)) + "."
Next Cnt
ConvertAddr2Str = Left$(ConvertAddr2Str, Len(ConvertAddr2Str) - 1)
End Function
Private Sub Form_Load()
Start
End Sub
Private Sub Start()
Dim lRet As Long
Dim I As Long
Dim Buffer() As Byte
Dim ListDatas As MIB_IPADDRTABLE
Text1 = ""
On Error GoTo Errors
GetIpAddrTable ByVal 0&, lRet, True
If lRet <= 0 Then Exit Sub
ReDim Buffer(0 To lRet - 1) As Byte
'取回 IP 地址的相關數據
GetIpAddrTable Buffer(0), lRet, False
'利用已經安裝 IP 地址的前四個字節﹐來取得登錄的信息
CopyMemory ListDatas.dwEntrys, Buffer(0), 4
Text1 = "在您的計算機上﹐共有" & ListDatas.dwEntrys & "組已經設定使用的 IP 地址" & vbCrLf
Text1 = Text1 & String(45, "=") & vbCrLf
For I = 0 To ListDatas.dwEntrys - 1
'將存在內存之中的地址結構﹐復制到清單之中
CopyMemory ListDatas.arIPInfo(I), Buffer(4 + (I * Len(ListDatas.arIPInfo(0)))), Len(ListDatas.arIPInfo(I))
Text1 = Text1 & "IP地址 " & ConvertAddr2Str(ListDatas.arIPInfo(I).dwAddr) & vbCrLf
Text1 = Text1 & "IP子網掩碼 " & ConvertAddr2Str(ListDatas.arIPInfo(I).dwSubnetMask) & vbCrLf
Text1 = Text1 & "IP廣播地址 " & ConvertAddr2Str(ListDatas.arIPInfo(I).dwBroadCastAddr) & vbCrLf
Text1 = Text1 & String(45, "*") & vbCrLf & vbCrLf
Next
Exit Sub
Errors:
End Sub