|
|
![]() |
|
||
|
|
|||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Network Services GetIpAddrTable: IP Address Table of the Local Machine |
|
| Posted: | Sunday February 11, 2001 |
| Updated: | Monday December 26, 2011 |
| Applies to: | VB4-32, VB5, VB6 |
| Developed with: | VB6, Windows 2000 |
| OS restrictions: | Windows 98, NT4 SP4+, Windows 2000, Windows XP or later |
| Author: | VBnet - Randy Birch |
|
Related: |
gethostbyname: Determine Network Host Name and IP Address gethostbyname: Resolve Host Name to IP Address gethostbyaddr: Obtain Host Name from IP Address IcmpSendEcho: Ping a Machine by Host Name |
| Prerequisites |
| One of the operating systems listed under OS Restrictions above. |
|
|
The GetIpAddrTable function retrieves the interface–to–IP address mapping table. |
| BAS Module Code |
| None. |
|
|
| Form Code |
|
|
| To a form add a command button (Command1), and a listview (Listview1). The code creates the required columns. Add the following to the form: |
|
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Const ERROR_SUCCESS As Long = 0
Private Type MIB_IPADDRROW
dwAddr As Long 'IP address
dwIndex As Long 'index of interface associated with this IP
dwMask As Long 'subnet mask for the IP address
dwBCastAddr As Long 'broadcast address (typically the IP
'with host portion set to either all
'zeros or all ones)
dwReasmSize As Long 'reassembly size for received datagrams
unused1 As Integer 'not currently used (but shown anyway)
unused2 As Integer 'not currently used (but shown anyway)
End Type
Private Declare Function GetIpAddrTable Lib "iphlpapi.dll" _
(ByRef ipAddrTable As Byte, _
ByRef dwSize As Long, _
ByVal bOrder As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(dst As Any, src As Any, ByVal bcount As Long)
Private Declare Function inet_ntoa Lib "wsock32" _
(ByVal addr As Long) As Long
Private Declare Function lstrcpyA Lib "kernel32" _
(ByVal RetVal As String, _
ByVal Ptr As Long) As Long
Private Declare Function lstrlenA Lib "kernel32" _
(ByVal Ptr As Any) As Long
Private Sub Form_Load()
With ListView1
.View = lvwReport
.ColumnHeaders.Add , , "Index"
.ColumnHeaders.Add , , "IP Address"
.ColumnHeaders.Add , , "Subnet Mask"
.ColumnHeaders.Add , , "Broadcast Addr"
.ColumnHeaders.Add , , "Reassembly"
.ColumnHeaders.Add , , "unused1"
.ColumnHeaders.Add , , "unused2"
End With
End Sub
Public Function GetInetStrFromPtr(ByVal Address As Long) As String
GetInetStrFromPtr = GetStrFromPtrA(inet_ntoa(Address))
End Function
Public Function GetStrFromPtrA(ByVal lpszA As Long) As String
GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function
Private Sub Command1_Click()
Dim IPAddrRow As MIB_IPADDRROW
Dim buff() As Byte
Dim cbRequired As Long
Dim nStructSize As Long
Dim nRows As Long
Dim cnt As Long
Dim itmx As ListItem
Call GetIpAddrTable(ByVal 0&, cbRequired, 1)
If cbRequired > 0 Then
ReDim buff(0 To cbRequired - 1) As Byte
If GetIpAddrTable(buff(0), cbRequired, 1) = ERROR_SUCCESS Then
'saves using LenB in the CopyMemory calls below
nStructSize = LenB(IPAddrRow)
'first 4 bytes is a long indicating the
'number of entries in the table
CopyMemory nRows, buff(0), 4
For cnt = 1 To nRows
'moving past the four bytes obtained
'above, get one chunk of data and cast
'into an IPAddrRow type
CopyMemory IPAddrRow, buff(4 + (cnt - 1) * nStructSize), nStructSize
'pass the results to the listview
With IPAddrRow
Set itmx = ListView1.ListItems.Add(, , GetInetStrFromPtr(.dwIndex))
itmx.SubItems(1) = GetInetStrFromPtr(.dwAddr)
itmx.SubItems(2) = GetInetStrFromPtr(.dwMask)
itmx.SubItems(3) = GetInetStrFromPtr(.dwBCastAddr)
itmx.SubItems(4) = GetInetStrFromPtr(.dwReasmSize)
itmx.SubItems(5) = (.unused1)
itmx.SubItems(6) = (.unused2)
End With
Next cnt
End If
End If
End Sub |
| Comments |
|
|
|
|
|
|||||
|
|||||
|
|
|||||
|
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |