Results 1 to 8 of 8

Thread: Get MAC Address

  1. #1

    Thread Starter
    Hyperactive Member compuGEEK's Avatar
    Join Date
    May 1999
    Location
    Mpls,MN,USA
    Posts
    281

    Question

    Hi,

    Does anyone know how to get the MAC address from the users
    NIC card?

    It's not part of the environment variables, is it?

    Thanks,

  2. #2
    Serge's Avatar
    Join Date
    Feb 1999
    Location
    Scottsdale, Arizona, USA
    Posts
    2,744
    Here is how you can get MAC address for NIC card .But this code should be executed on the computer where the card is installed.
    Code:
    Private Const NCBASTAT As Long = &H33
    Private Const NCBNAMSZ As Long = 16
    Private Const HEAP_ZERO_MEMORY As Long = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS As Long = &H4
    Private Const NCBRESET As Long = &H32
    
    Private Type NET_CONTROL_BLOCK
       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
       ncb_event      As Long
    End Type
    
    Private 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
    
    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 NET_CONTROL_BLOCK) 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
    
    
    Private Function GetAddressMAC() As String
       Dim strBuffer As String
       Dim lngASTAT As Long
       Dim NCB As NET_CONTROL_BLOCK
       Dim AST As ASTAT
    
       NCB.ncb_command = NCBRESET
       Call Netbios(NCB)
       
       NCB.ncb_callname = "*               "
       NCB.ncb_command = NCBASTAT
       
       NCB.ncb_lana_num = 0
       NCB.ncb_length = Len(AST)
       
       lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _
                Or HEAP_ZERO_MEMORY, NCB.ncb_length)
                
       If lngASTAT = 0 Then
          MsgBox "memory allocation failed!"
          Exit Function
       End If
       
       NCB.ncb_buffer = lngASTAT
       Call Netbios(NCB)
       
       CopyMemory AST, NCB.ncb_buffer, Len(AST)
       
       strBuffer = 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, lngASTAT
    
       GetAddressMAC = strBuffer
    End Function

  3. #3

    Thread Starter
    Hyperactive Member compuGEEK's Avatar
    Join Date
    May 1999
    Location
    Mpls,MN,USA
    Posts
    281
    Wow Serge, Thanks!!

    Suppose a user came to my website, is it possible
    to grab the MAC address that way?

    Thanks,

    CG

  4. #4
    Serge's Avatar
    Join Date
    Feb 1999
    Location
    Scottsdale, Arizona, USA
    Posts
    2,744
    Since you can't use APIs with VBScript, you probably would have to create an ActiveX control which will have this code
    and then use this control on your ASP page. I'm already
    doing something similar on one of mine asp pages.
    Basically, I stick control on the page, which will grab
    some info from the client, then I refresh the page from the
    client side scripting passing needed information as a query string.
    Also, bare in mind that if you use ActiveX control on your page, then you have to be sure that all clients are using Internet Explorer


    Regards,

  5. #5

    Thread Starter
    Hyperactive Member compuGEEK's Avatar
    Join Date
    May 1999
    Location
    Mpls,MN,USA
    Posts
    281
    Hi Serge,

    This URL is for a website called Shields UP! A Internet Connection Security for Windows Users.

    https://grc.com/x/ne.dll?bh0bkyd2

    There is a button labeled "Test My Shields", if you click
    that button, the next page will show you your IP address, your computer's name etc.

    About half way down the page it will show you your MAC address on your NIC card. It doesn't download anything for
    that to happen.

    I think that would be a great feature to know how to use. Some of our app's where I work are going to be ASP delivered and I think that would be a great feature to build
    into some of them.

    Thanks,

    CG

  6. #6
    Serge's Avatar
    Join Date
    Feb 1999
    Location
    Scottsdale, Arizona, USA
    Posts
    2,744
    I've checked that site and it failed to determine my MAC address and computer name. All it did was idetified my IP address, which is really easy to do with ASP. Also, if you look at the address bar for that page you would notice that the url they use is
    http://grc.com/x/ne.dll?rh1ck2l2
    So apparently, they use DLL with functionality similar to what I've shown you. You still have to understand that they have to push their stuff (DLL) to your machine in order for them to do that, unless they use a Windows DLL of some kind.


    Regards,

  7. #7

    Thread Starter
    Hyperactive Member compuGEEK's Avatar
    Join Date
    May 1999
    Location
    Mpls,MN,USA
    Posts
    281

    Thumbs up

    You're absolutely right about the DLL...
    Anyway, Serge, thanks for your insight!

    CG

  8. #8
    Lively Member
    Join Date
    Jan 2000
    Posts
    123
    I found the site mentioned above very interesting.

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