如果用户通过网卡接入网络,那他访问我的网站时能否得到他网卡的物理地址?
能不能用vb写一个ActiveX组件,然后调用?

解决方案 »

  1.   

    得到其他机器的网卡地址Option Explicit
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' Copyright ?1996-2002 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 NO_ERROR = 0Private Declare Function inet_addr Lib "wsock32.dll" _
      (ByVal s As String) As LongPrivate Declare Function SendARP Lib "iphlpapi.dll" _
      (ByVal DestIP As Long, _
       ByVal SrcIP As Long, _
       pMacAddr As Long, _
       PhyAddrLen As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" _
       Alias "RtlMoveMemory" _
      (dst As Any, _
       src As Any, _
       ByVal bcount As Long)
       
    Private Sub Form_Load()   Text1.Text = "192.168.1.101"
       Text2.Text = ""
       Command1.Caption = "Get Remote Mac Address"
       
    End Sub
    Private Sub Command1_Click()   Dim sRemoteMacAddress As String
       
       If Len(Text1.Text) > 0 Then
       
          If GetRemoteMACAddress(Text1.Text, sRemoteMacAddress) Then
             Text2.Text = sRemoteMacAddress
          Else
             Text2.Text = "(SendARP call failed)"
          End If
          
       End IfEnd Sub
    Private Function GetRemoteMACAddress(ByVal sRemoteIP As String, _
                                         sRemoteMacAddress As String) As Boolean   Dim dwRemoteIP As Long
       Dim pMacAddr As Long
       Dim bpMacAddr() As Byte
       Dim PhyAddrLen As Long
       Dim cnt As Long
       Dim tmp As String
        
      'convert the string IP into
      'an unsigned long value containing
      'a suitable binary representation
      'of the Internet address given
       dwRemoteIP = inet_addr(sRemoteIP)
       
       If dwRemoteIP <> 0 Then
       
         'set PhyAddrLen to 6
          PhyAddrLen = 6
       
         'retrieve the remote MAC address
          If SendARP(dwRemoteIP, 0&, pMacAddr, PhyAddrLen) = NO_ERROR Then
          
             If pMacAddr <> 0 And PhyAddrLen <> 0 Then
          
               'returned value is a long pointer
               'to the mac address, so copy data
               'to a byte array
                ReDim bpMacAddr(0 To PhyAddrLen - 1)
                CopyMemory bpMacAddr(0), pMacAddr, ByVal PhyAddrLen
              
               'loop through array to build string
                For cnt = 0 To PhyAddrLen - 1
                   
                   If bpMacAddr(cnt) = 0 Then
                      tmp = tmp & "00-"
                   Else
                      tmp = tmp & Hex$(bpMacAddr(cnt)) & "-"
                   End If
             
                Next
               
               'remove the trailing dash
               'added above and return True
                If Len(tmp) > 0 Then
                   sRemoteMacAddress = Left$(tmp, Len(tmp) - 1)
                   GetRemoteMACAddress = True
                End If            Exit Function
             
             Else
                GetRemoteMACAddress = False
             End If
                
          Else
             GetRemoteMACAddress = False
          End If  'SendARP
          
       Else
          GetRemoteMACAddress = False
       End If  'dwRemoteIP
          
    End Function
      

  2.   

    HOWTO: Get Network Adapter Address from Visual Basic
    http://support.microsoft.com/default.aspx?scid=kb;en-us;175472