You are currently offline, waiting for your internet to reconnect

How To Get Network Adapter Address from Visual Basic

This article was previously published under Q175472
IPX and NETBIOS interfaces require network addresses. This article presentsa step-by-step example on how to use Netbios API call to get the networkadapter addresses from Microsoft Visual Basic.

Step-by-Step Example

  1. Create a new Standard EXE from Visual Basic. Form1 is created by default.
  2. Add a CommandButton to Form1. Its default name is Command1.
  3. Add the following code to the General Declarations section of Form1:
       Option Explicit   Private Const NCBASTAT = &H33   Private Const NCBNAMSZ = 16   Private Const HEAP_ZERO_MEMORY = &H8   Private Const HEAP_GENERATE_EXCEPTIONS = &H4   Private Const NCBRESET = &H32   Private Type NCB        ncb_command As Byte 'Integer        ncb_retcode As Byte 'Integer        ncb_lsn As Byte 'Integer        ncb_num As Byte ' Integer        ncb_buffer As Long 'String        ncb_length As Integer        ncb_callname As String * NCBNAMSZ        ncb_name As String * NCBNAMSZ        ncb_rto As Byte 'Integer        ncb_sto As Byte ' Integer        ncb_post As Long        ncb_lana_num As Byte 'Integer        ncb_cmd_cplt As Byte  'Integer        ncb_reserve(9) As Byte ' Reserved, must be 0        ncb_event As Long   End Type   Private Type ADAPTER_STATUS        adapter_address(5) As Byte 'As String * 6        rev_major As Byte 'Integer        reserved0 As Byte 'Integer        adapter_type As Byte 'Integer        rev_minor As Byte 'Integer        duration As Integer        frmr_recv As Integer        frmr_xmit As Integer        iframe_recv_err As Integer        xmit_aborts As Integer        xmit_success As Long        recv_success As Long        iframe_xmit_err As Integer        recv_buff_unavail As Integer        t1_timeouts As Integer        ti_timeouts As Integer        Reserved1 As Long        free_ncbs As Integer        max_cfg_ncbs As Integer        max_ncbs As Integer        xmit_buf_unavail As Integer        max_dgram_size As Integer        pending_sess As Integer        max_cfg_sess As Integer        max_sess As Integer        max_sess_pkt_size As Integer        name_count As Integer   End Type   Private Type NAME_BUFFER        name  As String * NCBNAMSZ        name_num As Integer        name_flags As Integer   End Type   Private Type ASTAT        adapt As ADAPTER_STATUS        NameBuff(30) As NAME_BUFFER   End Type   Private Declare Function Netbios Lib "netapi32.dll" _           (pncb As NCB) As Byte   Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _           hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)   Private Declare Function GetProcessHeap Lib "kernel32" () As Long   Private Declare Function HeapAlloc Lib "kernel32" _           (ByVal hHeap As Long, ByVal dwFlags As Long, _           ByVal dwBytes As Long) As Long   Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, _           ByVal dwFlags As Long, lpMem As Any) As Long						
  4. Add the following code to Command1_Click event procedure:
       Sub Command1_Click()       Dim myNcb As NCB       Dim bRet As Byte       myNcb.ncb_command = NCBRESET       bRet = Netbios(myNcb)       myNcb.ncb_command = NCBASTAT       myNcb.ncb_lana_num = 0       myNcb.ncb_callname = "*               "       Dim myASTAT As ASTAT, tempASTAT As ASTAT       Dim pASTAT As Long       myNcb.ncb_length = Len(myASTAT)       Debug.Print Err.LastDllError       pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _                Or HEAP_ZERO_MEMORY, myNcb.ncb_length)       If pASTAT = 0 Then          Debug.Print "memory allcoation failed!"          Exit Sub       End If       myNcb.ncb_buffer = pASTAT       bRet = Netbios(myNcb)       Debug.Print Err.LastDllError       CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)       MsgBox Hex(myASTAT.adapt.adapter_address(0)) & " " & _              Hex(myASTAT.adapt.adapter_address(1)) _              & " " & Hex(myASTAT.adapt.adapter_address(2)) & " " _              & Hex(myASTAT.adapt.adapter_address(3)) _              & " " & Hex(myASTAT.adapt.adapter_address(4)) & " " _              & Hex(myASTAT.adapt.adapter_address(5))       HeapFree GetProcessHeap(), 0, pASTAT   End Sub						
  5. Press the F5 key to run the program.
  6. Click on Command1. Note that the network adapter address is displayed in a message box.
KBINetDev VKBWinAPI kbdsi kbDSupport kbVBp kbVBp400 kbVBp500 kbVBp600

Article ID: 175472 - Last Review: 07/13/2004 19:10:00 - Revision: 3.2

  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • kbhowto kbapi kbnetbios kbnetwork KB175472