Results 1 to 5 of 5

Thread: MAC address w/o NETBios loaded

  1. #1
    RStout
    Guest

    MAC address w/o NETBios loaded

    Subject says it all. I need to get the MAC address of the workstation I am working on without the Microsoft client or NETBios loaded.

  2. #2
    Addicted Member csammis's Avatar
    Join Date
    Mar 2001
    Location
    /dev/null
    Posts
    226
    Forgive a tired guy for asking a dumb question, but what're MAC addresses? I know how to get a lot of info regarding networks, but I don't know exactly what you want
    Things I've Said:
    "Life's funny like that...elephants can wear frilly lace panties, and Dubya still looks like a monkey in a big chair"
    "Take four goats and strap one to each foot of a llama. Presto, goat-powered llama!"
    "You want to get me to work more, get me a Coke. No? Then deal with inferior garbage, I'm not coding another line and your clients can go to......thanks, I'd love a Coke right about now!"

  3. #3
    Hyperactive Member Jason Badon's Avatar
    Join Date
    Feb 2001
    Location
    Colorado
    Posts
    329
    A (MAC) address is a unique number that identifies a unit that uses TCP/IP. Where as it is not uncommon for two IP addresses to be the same through out the Internet no two MAC addresses will ever be the same or at least there shouldn’t be. For example I worked for a company that made a piece of test equipment that had a internal web server so you could log on to that piece of equipment anywhere in the world using your web browser and monitor it's results or change settings.

    Hope this helps

  4. #4
    PowerPoster eiSecure's Avatar
    Join Date
    Jul 2000
    Location
    Texas
    Posts
    2,209
    The code below can get you the MAC address. The other 2 specifications, i'm not too sure of. Tell me if it works or not.

    In a module:
    Code:
    Option Explicit
    
    Public Const NCBASTAT As Long = &H33
    Public Const NCBNAMSZ As Long = 16
    Public Const HEAP_ZERO_MEMORY As Long = &H8
    Public Const HEAP_GENERATE_EXCEPTIONS As Long = &H4
    Public Const NCBRESET As Long = &H32
    
    Public Type NET_CONTROL_BLOCK  'NCB
       ncb_command    As Byte
       ncb_retcode    As Byte
       ncb_lsn        As Byte
       ncb_num        As Byte
       ncb_buffer     As Long
       ncb_length     As Integer
       ncb_callname   As String * NCBNAMSZ
       ncb_name       As String * NCBNAMSZ
       ncb_rto        As Byte
       ncb_sto        As Byte
       ncb_post       As Long
       ncb_lana_num   As Byte
       ncb_cmd_cplt   As Byte
       ncb_reserve(9) As Byte ' Reserved, must be 0
       ncb_event      As Long
    End Type
    
    Public Type ADAPTER_STATUS
       adapter_address(5) As Byte
       rev_major         As Byte
       reserved0         As Byte
       adapter_type      As Byte
       rev_minor         As Byte
       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
       
    Public Type NAME_BUFFER
       name        As String * NCBNAMSZ
       name_num    As Integer
       name_flags  As Integer
    End Type
    
    Public Type ASTAT
       adapt          As ADAPTER_STATUS
       NameBuff(30)   As NAME_BUFFER
    End Type
    
    Public Declare Function Netbios Lib "netapi32.dll" _
       (pncb As NET_CONTROL_BLOCK) As Byte
         
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
       (hpvDest As Any, ByVal _
        hpvSource As Long, ByVal _
        cbCopy As Long)
         
    Public Declare Function GetProcessHeap Lib "kernel32" () As Long
    
    Public Declare Function HeapAlloc Lib "kernel32" _
        (ByVal hHeap As Long, ByVal dwFlags As Long, _
         ByVal dwBytes As Long) As Long
         
    Public Declare Function HeapFree Lib "kernel32" _
        (ByVal hHeap As Long, _
         ByVal dwFlags As Long, _
         lpMem As Any) As Long
    
    
    Public Function GetMACAddress() As String
    
      'retrieve the MAC Address for the network controller
      'installed, returning a formatted string
       
       Dim tmp As String
       Dim pASTAT As Long
       Dim NCB As NET_CONTROL_BLOCK
       Dim AST As ASTAT
    
      'The IBM NetBIOS 3.0 specifications defines four basic
      'NetBIOS environments under the NCBRESET command. Win32
      'follows the OS/2 Dynamic Link Routine (DLR) environment.
      'This means that the first NCB issued by an application
      'must be a NCBRESET, with the exception of NCBENUM.
      'The Windows NT implementation differs from the IBM
      'NetBIOS 3.0 specifications in the NCB_CALLNAME field.
       NCB.ncb_command = NCBRESET
       Call Netbios(NCB)
       
      'To get the Media Access Control (MAC) address for an
      'ethernet adapter programmatically, use the Netbios()
      'NCBASTAT command and provide a "*" as the name in the
      'NCB.ncb_CallName field (in a 16-chr string).
       NCB.ncb_callname = "*               "
       NCB.ncb_command = NCBASTAT
       
      'For machines with multiple network adapters you need to
      'enumerate the LANA numbers and perform the NCBASTAT
      'command on each. Even when you have a single network
      'adapter, it is a good idea to enumerate valid LANA numbers
      'first and perform the NCBASTAT on one of the valid LANA
      'numbers. It is considered bad programming to hardcode the
      'LANA number to 0 (see the comments section below).
       NCB.ncb_lana_num = 0
       NCB.ncb_length = Len(AST)
       
       pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _
                Or HEAP_ZERO_MEMORY, NCB.ncb_length)
                
       If pASTAT = 0 Then
          Debug.Print "memory allocation failed!"
          Exit Function
       End If
       
       NCB.ncb_buffer = pASTAT
       Call Netbios(NCB)
       
       CopyMemory AST, NCB.ncb_buffer, Len(AST)
       
       tmp = Format$(Hex(AST.adapt.adapter_address(0)), "00") & " " & _
             Format$(Hex(AST.adapt.adapter_address(1)), "00") & " " & _
             Format$(Hex(AST.adapt.adapter_address(2)), "00") & " " & _
             Format$(Hex(AST.adapt.adapter_address(3)), "00") & " " & _
             Format$(Hex(AST.adapt.adapter_address(4)), "00") & " " & _
             Format$(Hex(AST.adapt.adapter_address(5)), "00")
               
       HeapFree GetProcessHeap(), 0, pASTAT
       
       GetMACAddress = tmp
    
    End Function
    On a form with a text box:
    Code:
    Private Sub Form_Load()
    Text1.Text = GetMACAddress()
    End Sub
    Hope this helps!

  5. #5
    RStout
    Guest

    No, it did not work.

    Ther has to be a way to do this without the MS client loaded.

    HELP!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width