[AccessD] A2K: Getting MAC Address

Stephen Bond stephen at bondsoftware.co.nz
Tue Sep 21 22:07:53 CDT 2004


Yep, agree with that, good stuff - I have already adapted this to display on the 'debug' form in the next project.  Had to strip nulls but worth the effort ...

Stephen Bond

> -----Original Message-----
> From: Darren DICK [mailto:d.dick at uws.edu.au]
> Sent: Wednesday, 22 September 2004 2:33 p.m.
> To: 'Access Developers discussion and problem solving'
> Subject: RE: [AccessD] A2K: Getting MAC Address
> 
> 
> Hi Stuart
> Wow this is way cool
> I have a prob though :-((
> 
>  
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of 
> Stuart McLachlan
> Sent: Wednesday, 22 September 2004 10:53 AM
> To: Access Developers discussion and problemsolving
> Subject: Re: [AccessD] A2K: Getting MAC Address
> 
> On 22 Sep 2004 at 10:35, Darren DICK wrote:
> 
> > Hi All
> > I have some code to get the machine name and the IP address/es but 
> > does anyone have any samples to get a MAC Address off a machine??
> >  
> Here's code to give you just about everything you could want for all
> adapters installed. (Watch for wrap)
> 
> The  "Physical Address" returns the MAC Address
> 
> Option Compare Database
> Option Explicit
> 
> Public Const MAX_HOSTNAME_LEN = 132
> Public Const MAX_DOMAIN_NAME_LEN = 132
> Public Const MAX_SCOPE_ID_LEN = 260
> Public Const MAX_ADAPTER_NAME_LENGTH = 260 Public Const
> MAX_ADAPTER_ADDRESS_LENGTH = 8 Public Const 
> MAX_ADAPTER_DESCRIPTION_LENGTH =
> 132 Public Const ERROR_BUFFER_OVERFLOW = 111 Public Const
> MIB_IF_TYPE_ETHERNET = 1 Public Const MIB_IF_TYPE_TOKENRING = 
> 2 Public Const
> MIB_IF_TYPE_FDDI = 3 Public Const MIB_IF_TYPE_PPP = 4 Public Const
> MIB_IF_TYPE_LOOPBACK = 5 Public Const MIB_IF_TYPE_SLIP = 6
> 
> Type IP_ADDR_STRING
>     Next As Long
>     IpAddress As String * 16
>     IpMask As String * 16
>     Context As Long
> End Type
> 
> Type IP_ADAPTER_INFO
>     Next As Long
>     ComboIndex As Long
>     AdapterName As String * MAX_ADAPTER_NAME_LENGTH
>     Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH
>     AddressLength As Long
>     Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
>     Index As Long
>     Type As Long
>     DhcpEnabled As Long
>     CurrentIpAddress As Long
>     IpAddressList As IP_ADDR_STRING
>     GatewayList As IP_ADDR_STRING
>     DhcpServer As IP_ADDR_STRING
>     HaveWins As Boolean
>     PrimaryWinsServer As IP_ADDR_STRING
>     SecondaryWinsServer As IP_ADDR_STRING
>     LeaseObtained As Long
>     LeaseExpires As Long
> End Type
> 
> Type FIXED_INFO
>     HostName As String * MAX_HOSTNAME_LEN
>     DomainName As String * MAX_DOMAIN_NAME_LEN
>     CurrentDnsServer As Long
>     DnsServerList As IP_ADDR_STRING
>     NodeType As Long
>     ScopeId  As String * MAX_SCOPE_ID_LEN
>     EnableRouting As Long
>     EnableProxy As Long
>     EnableDns As Long
> End Type
> 
> Public Declare Function GetNetworkParams Lib "IPHlpApi" 
> (FixedInfo As Any,
> pOutBufLen As Long) As Long Public Declare Function 
> GetAdaptersInfo Lib
> "IPHlpApi" (IpAdapterInfo As Any, pOutBufLen As Long) As Long 
> Public Declare
> Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" 
> (Destination As Any,
> Source As Any, ByVal Length As Long)
> 
> Function NWInfo() As Long
>     'This example was created by George Bernier 
> (bernig at dinomail.qc.ca)
>     Dim error As Long
>     Dim FixedInfoSize As Long
>     Dim AdapterInfoSize As Long
>     Dim i As Integer
>     Dim PhysicalAddress  As String
>     Dim NewTime As Date
>     Dim AdapterInfo As IP_ADAPTER_INFO
>     Dim Adapt As IP_ADAPTER_INFO
>     Dim AddrStr As IP_ADDR_STRING
>     Dim FixedInfo As FIXED_INFO
>     Dim Buffer As IP_ADDR_STRING
>     Dim pAddrStr As Long
>     Dim pAdapt As Long
>     Dim Buffer2 As IP_ADAPTER_INFO
>     Dim FixedInfoBuffer() As Byte
>     Dim AdapterInfoBuffer() As Byte
>     
>     'Get the main IP configuration information for this 
> machine using a
> FIXED_INFO structure
>     FixedInfoSize = 0
>     error = GetNetworkParams(ByVal 0&, FixedInfoSize)
>     If error <> 0 Then
>         If error <> ERROR_BUFFER_OVERFLOW Then
>            MsgBox "GetNetworkParams sizing failed with error " & error
>            Exit Function
>         End If
>     End If
>     ReDim FixedInfoBuffer(FixedInfoSize - 1)
> 
>     error = GetNetworkParams(FixedInfoBuffer(0), FixedInfoSize)
>     If error = 0 Then
>             CopyMemory FixedInfo, FixedInfoBuffer(0), Len(FixedInfo)
>             MsgBox "Host Name:  " & FixedInfo.HostName 'host name
>             MsgBox "DNS Servers:  " & 
> FixedInfo.DnsServerList.IpAddress 'dns
> server IP
>             pAddrStr = FixedInfo.DnsServerList.Next
>             Do While pAddrStr <> 0
>                   CopyMemory Buffer, ByVal pAddrStr, Len(Buffer)
>                   MsgBox "DNS Servers:  " & Buffer.IpAddress 
> 'dns server IP
>                   pAddrStr = Buffer.Next
>             Loop
>             
>             Select Case FixedInfo.NodeType 'node type
>                        Case 1
>                                   MsgBox "Node type: Broadcast"
>                        Case 2
>                                    MsgBox "Node type: Peer to peer"
>                        Case 4
>                                     MsgBox "Node type: Mixed"
>                        Case 8
>                                     MsgBox "Node type: Hybrid"
>                        Case Else
>                                     MsgBox "Unknown node type"
>             End Select
>             
>             MsgBox "NetBIOS Scope ID:  " & FixedInfo.ScopeId 'scope ID
>             'routing
>             If FixedInfo.EnableRouting Then
>                        MsgBox "IP Routing Enabled "
>             Else
>                        MsgBox "IP Routing not enabled"
>             End If
>             ' proxy
>             If FixedInfo.EnableProxy Then
>                        MsgBox "WINS Proxy Enabled "
>             Else
>                        MsgBox "WINS Proxy not Enabled "
>             End If
>             ' netbios
>             If FixedInfo.EnableDns Then
>                       MsgBox "NetBIOS Resolution Uses DNS "
>             Else
>                       MsgBox "NetBIOS Resolution Does not use DNS  "
>             End If
>     Else
>             MsgBox "GetNetworkParams failed with error " & error
>             Exit Function
>     End If
>     
>     'Enumerate all of the adapter specific information using the
> IP_ADAPTER_INFO structure.
>     'Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
>     
>     AdapterInfoSize = 0
>     error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
>     If error <> 0 Then
>         If error <> ERROR_BUFFER_OVERFLOW Then
>            MsgBox "GetAdaptersInfo sizing failed with error " & error
>            Exit Function
>         End If
>     End If
>    ReDim AdapterInfoBuffer(AdapterInfoSize - 1)
>  
>  ' Get actual adapter information
>    error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)
>    If error <> 0 Then
>       MsgBox "GetAdaptersInfo failed with error " & error
>       Exit Function
>    End If
>    CopyMemory AdapterInfo, AdapterInfoBuffer(0), Len(AdapterInfo)
>    pAdapt = AdapterInfo.Next
> 
>    Do While pAdapt <> 0
>         CopyMemory Buffer2, AdapterInfo, Len(Buffer2)
>           Select Case Buffer2.Type
>                 Case MIB_IF_TYPE_ETHERNET
>                     MsgBox "Ethernet adapter "
>                 Case MIB_IF_TYPE_TOKENRING
>                     MsgBox "Token Ring adapter "
>                 Case MIB_IF_TYPE_FDDI
>                     MsgBox "FDDI adapter "
>                 Case MIB_IF_TYPE_PPP
>                     MsgBox "PPP adapter"
>                 Case MIB_IF_TYPE_LOOPBACK
>                     MsgBox "Loopback adapter "
>                 Case MIB_IF_TYPE_SLIP
>                     MsgBox "Slip adapter "
>                 Case Else
>                     MsgBox "Other adapter "
>         End Select
>     MsgBox " AdapterName: " & Buffer2.AdapterName
>     MsgBox "AdapterDescription: " & Buffer2.Description 'adatpter name
> 
>     For i = 0 To Buffer2.AddressLength - 1
>            PhysicalAddress = PhysicalAddress & Hex(Buffer2.Address(i))
>             If i < Buffer2.AddressLength - 1 Then
>              PhysicalAddress = PhysicalAddress & "-"
>             End If
> 
>     Next
>     MsgBox "Physical Address: " & PhysicalAddress 'mac address
>     If Buffer2.DhcpEnabled Then
>             MsgBox "DHCP Enabled "
>     Else
>             MsgBox "DHCP disabled"
>     End If
> 
>     pAddrStr = Buffer2.IpAddressList.Next
>     Do While pAddrStr <> 0
>            CopyMemory Buffer, Buffer2.IpAddressList, LenB(Buffer)
>            MsgBox "IP Address: " & Buffer.IpAddress
>            MsgBox "Subnet Mask: " & Buffer.IpMask
>            pAddrStr = Buffer.Next
>            If pAddrStr <> 0 Then
>             CopyMemory Buffer2.IpAddressList, ByVal pAddrStr,
> Len(Buffer2.IpAddressList)
>            End If
>    Loop
>     MsgBox "Default Gateway: " & Buffer2.GatewayList.IpAddress
>     pAddrStr = Buffer2.GatewayList.Next
>     Do While pAddrStr <> 0
>             CopyMemory Buffer, Buffer2.GatewayList, Len(Buffer)
>             MsgBox "IP Address: " & Buffer.IpAddress
>             pAddrStr = Buffer.Next
>             If pAddrStr <> 0 Then
>             CopyMemory Buffer2.GatewayList, ByVal pAddrStr,
> Len(Buffer2.GatewayList)
>             End If
>     Loop
> 
>     MsgBox "DHCP Server: " & Buffer2.DhcpServer.IpAddress
>     MsgBox "Primary WINS Server: " & 
> Buffer2.PrimaryWinsServer.IpAddress
>     MsgBox "Secondary WINS Server: " & 
> Buffer2.SecondaryWinsServer.IpAddress
> 
>     ' Display time
>     NewTime = CDate(Adapt.LeaseObtained)
>     MsgBox "Lease Obtained: " & CStr(NewTime)
> 
>     NewTime = CDate(Adapt.LeaseExpires)
>     MsgBox "Lease Expires :  " & CStr(NewTime)
>     pAdapt = Buffer2.Next
>     If pAdapt <> 0 Then
>         CopyMemory AdapterInfo, ByVal pAdapt, Len(AdapterInfo)
>     End If
> 
>    Loop
>    
> End Function
> 
> --
> Stuart
> 
> 
> -- 
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 
> -- 
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 



More information about the AccessD mailing list