ËÒ¡ÁÕ¤Ó¶ÒÁ ¢ÍãËéä»â¾Êµìŧ àÇ纺ÍÃì´¨Õ·Ù¨Õà¹çµ´Íµ¤ÍÁ µÑÇãËÁèá·¹¹èФÃѺ

ËÃ×͵ԴµèÍà¢éÒÁÒ·Ò§ Inbox ·Õè à¿«ºØê¤ ¼Á¤ÃѺ

˹éÒËÅÑ¡
¢èÒÇÊÒà - º·¤ÇÒÁ ·Ñé§ËÁ´
VB 6/VB.Net
ASP/ASP.Net
¨Ñº©èÒ¤ÍÁ¾ÔÇàµÍÃì
àÃÕ¹ÃÙé¼èÒ¹ Flash Movie
º·¤ÇÒÁ·ÕèÁÕ¼ÙéµÍºÅèÒÊØ´  
 RSS Feeds
 ´ÒǹìâËÅ´â»Ãá¡ÃÁ RSS Reader ä´é·Õè¹Õè ...   Download â»Ãá¡ÃÁ RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 6 1 6 1 7 8

7 ¸Ñ¹ÇÒ¤Á ¾.È.2549
134 Users On-Line.
Visitors - Page views
 8 9 7 3 9 2 1
1 ¡ØÁÀҾѹ¸ì ¾.È.2551

Google   
àÇçº g2gnet.com
¢¹Ò´µÑÇÍÑ¡ÉÃ:  

ᨡ¿ÃÕâ¤é´â»Ãá¡ÃÁÍèÒ¹¤èÒ MAC Address ã¹à¤Ã×Í¢èÒ LAN - VB6

Category »  VB 6/VB.Net
â´Â : Webmaster àÁ×èÍ 22/6/2553   àÇÅÒ: 11:55
(ÍèÒ¹ : 19156) 
¨Ø´»ÃÐʧ¤ìàÃ×èͧ¹Õé (áÅÐàÃ×èͧµèÍæä») ¼ÁÍÂÒ¡¹ÓàʹÍá¹Ç¤ÇÒÁ¤Ô´ãËé¡Ñº¡ÅØèÁ¼Ùé·Õè´ÙáÅ Network ä´éËѹÁÒʹã¨àÃ×èͧ¢Í§ Programming à¾×è͹Óä»»ÃÐØÂØ¡µì ªèÇÂ㹡ÒèѴà¡çº¢éÍÁÙÅ àªè¹ ¡ÒÃàª×èÍÁµèÍÊÒ¨ҡà¤Ã×èͧµèÒ§æáµèÅÐá¼¹¡ à¢éÒä»Âѧ Switching Hub µÑÇä˹ ãªé Port ä˹ ËÁÒÂàÅ¢ IP/MAC Address áÅÐ ¢éÍÁÙÅÍ×è¹æ¢Í§à¤Ã×èͧ¤ÍÁ¾ÔÇàµÍÃìÅÙ¡¢èÒ ·´á·¹Ãкº´Ñé§à´ÔÁ ¤×Í ¡ÒÃãªéâ¾Â¡ÃдÒÉ ËÃ×Í Excel ¤ÃѺ¼Á ... â¤é´µÑǹÕé ÍÒ¨¨ÐÁͧ´ÙÂÒ¡æä»ºéÒ§ à¾ÃÒй͡à˹×ͨҡ¤ÓÇèÒºÔµ ÇèÒ亵ìáÅéÇ Âѧµéͧä»à¡ÕèÂǾѹ¡Ñº¡ÒêÕéµÓáË¹è§ Memory Address ËÃ×Í ¡ÒÃãªé Pointer ¹Ñè¹àͧ ... ÍÂèÒà¾Õ§áµè¡´ F5 Ãѹ¾ÃÇ´ÍÂèÒ§à´ÕÂǤÃѺ µéͧãªé¡Òà Debug Program à¢éÒªèÇ´éÇ ... ¤Ø³¶Ö§¨Ðà¢éÒ㨠áÅÐ ÁͧÀÒ¾ÍÍ¡
¢Í§á¶ÁÊÓËÃѺ¼Ùé´ÙáÅÃкºà¤Ã×Í¢èÒ - Fluke Network Inspector 5.0

´ÒǹìâËÅ´ãªé§Ò¹ä´é·Õè¹Õè ... (੾ÒÐÊÁÒªÔ¡)

´ÒǹìâËÅ´ Source Code ÊÓËÃѺ¼Ùéãªé§Ò¹ Visual Basic 6
´ÒǹìâËÅ´ Source Code ÊÓËÃѺ MS Visual Basic 6.0 - Service Pack 6
 ´ÒǹìâËÅ´ Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ´ÒǹìâËÅ´ Microsoft Data Access Object (MDAC) áÅÐ Jet 4.0 Update
 ´ÒǹìâËÅ´ Microsoft Visual Basic Service Pack 6
¢éÍÁÙÅà¾ÔèÁàµÔÁ
¡ÒÃá»Å§àÅ¢°Ò¹ 10 à»ç¹àÅ¢°Ò¹ 16 áÅÐ àÅ¢°Ò¹ 2 à»ç¹àÅ¢°Ò¹ 16 (á¹Ç¤Ô´¢Í§ªèÒ§)
ÇÔ¸Õ¤Ô´àªè¹ B5 (°Ò¹ 16) áµèÅÐËÅÑ¡¢Í§°Ò¹ 16 ¤×Í B ¡Ñº 5 ÁѹÁÕ¢¹Ò´ËÅÑ¡ÅÐ 4 ºÔµ (°Ò¹ 2) àÁ×èÍ
B °Ò¹ 16 = 1 0 1 1 °Ò¹ 2 = 11 °Ò¹ 10
5 °Ò¹ 16 = 0 1 0 1 °Ò¹ 2 = 5 °Ò¹ 10

àÅ¢°Ò¹ 2 ·Ñé§ËÁ´¡ç¨Ðä´éà»ç¹ 1 0 1 1 0 1 0 1 (¢¹Ò´ 8 ºÔµ ËÃ×Í 1 亵ì) ¨Ðä´é 181 (°Ò¹ 10)

ËÒ¡¤Ø³äÁèà¢éÒã¨ËÅÑ¡¡ÒùÕé ... ¨ºàÅÂ
ÇÔ´ÕâÍ Ê͹¢Ñ鹵͹¡Òà Debug Program ´éÇ MS Visual Basic 6.0
àÃ×èͧ¢Í§â»Ãá¡ÃÁÂèÍ (ÍÕ¡·Õ) ... Sub Program, Routine, Procedure ËÃ×Í Function
¡Òà à»ÅÕ蹤èÒ MAC Address (Media Access Control Address) Ẻ§èÒÂæ
VB6 ¡Ñº¡ÒÃÍèÒ¹¤èÒ MAC Address ¢Í§ LAN Card ´éÇÂÇÔ¸ÕºéÒ¹æ (µÒÁà¤Â)

Design Time


Run Time

¿ÍÃìÁËÅÑ¡

Option Explicit

Private Sub cmdGetMAC_Click()

    If txtIPAddress.Text = "" Then Exit Sub
    
    ' Ê觤èÒ IP Address ä»Âѧ¿Ñ§¤ìªÑè¹ GetMAC
    txtMACAddress.Text = GetMAC(txtIPAddress.Text)
    
    ' ãËé Focus à¾×èÍä»ÃѺ¤èÒËÁÒÂàÅ¢ IP ãËÁè
    txtIPAddress.SetFocus
    ' Êè§¡Òá´¤ÕÂì Control + END ãËéä»ÍÂÙèµÓá˹觷éÒÂÊØ´¢Í§ TextBox
    SendKeys "^{END}"
End Sub

Private Sub Form_Load()
    ' µÑé§¿ÍÃìÁÍÂÙè¡Öè§¡ÅÒ§
    Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
    
    ' ãÊè¤èÒ·´Êͺŧä»
    txtIPAddress.Text = "192.168.0.1"
    txtMACAddress.Text = ""

End Sub

Private Sub txtIPAddress_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then Call cmdGetMAC_Click
End Sub
Module - modGetMACLan.bas

Option Explicit

' ¿Ñ§¤ìªÑè¹·Õèá»Å§ËÁÒÂàÅ¢ IPv4 ãËé¡ÅÒÂà»ç¹àÅ¢¨Ó¹Ç¹àµçÁẺäÁè¤Ô´à¤Ã×èͧËÁÒÂá·¹ (ÁÕáµè 0 ¡Ñº àÅ¢ºÇ¡) àªè¹
' ¨Ò¡ 192.168.1.20 ¡ç¨Ð¡ÅÒÂà»ç¹ 335653056 á·¹ áµèãªé§Ò¹¨ÃÔ§Áѹ¨Ðµéͧ»ÃÐÁÇżÅã¹àÅ¢°Ò¹ 2 ¹èФÃѺ
Public Declare Function inet_addr Lib "wsock32.dll" ( _
    ByVal s As String) _
    As Long

' Êèǹ¹Õé͸ԺÒÂã¹â¤é´´éÒ¹ÅèÒ§¤ÃѺ
Public Declare Function SendARP Lib "iphlpapi.dll" ( _
    ByVal DestIP As Long, _
    ByVal SrcIP As Long, _
    pMacAddress As Long, _
    pMacAddressLen As Long _
    ) As Long

' ¡ÒêÕéµÓá˹觢ͧ Memory Address
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    Destination As Any, _
    Source As Any, _
    ByVal Length As Long _
    )

' µÑÇá»ÃẺ Global 㹿ÍÃìÁ¹Õé â»Ãá¡ÃÁÂèÍ·ءæµÑÇ ¨ÐÊÒÁÒöãªé§Ò¹ä´é
' àÍÒäÇéà¡çº¤èҤӵͺ¤ÃѺ
Dim sRemoteMacAddress As String

' ##############################################################
' ¿Ñ§¤ìªÑè¹ÂèÍÂ㹡ÒõÃǨÊͺËÒ¤èÒ MAC Address
Public Function GetMAC(strIPAddress As String) As String
' ##############################################################

   
    If Len(strIPAddress) > 0 Then
    
        ' Ê觤èÒ IP Address ä»ãËé¡Ñº¿Ñ§¤ìªÑè¹ GetRemoteAddress
        ' ¡Ã³ÕÊÒÁÒöËÒ¤èÒ MAC Address ä´é ¿Ñ§¤ìªÑ蹨РReturn ¤èÒ¨ÃÔ§ (True) ¡ÅѺÁÒ
        If GetRemoteMACAddress(strIPAddress) Then
            
            GetMAC = sRemoteMacAddress
        ' ÁÕ¢éͼԴ¾ÅÒ´
        Else
            GetMAC = "SendARP Fail"
        End If
    
    End If
    
    sRemoteMacAddress = ""

End Function

' ##############################################################
' Ê觤èÒ IP Address ÁÒãËé¿Ñ§¤ìªÑè¹ Êèǹ¿Ñ§¤ìªÑ蹨Ф׹¤èÒ¡ÅѺẺ Boolean à¾×èÍá¨é§ÇèÒ·Ó§Ò¹ÊÓàÃç¨ËÃ×ÍäÁè
Function GetRemoteMACAddress( _
    sRemoteIP As String _
    ) As Boolean
' ##############################################################

   Dim dwRemoteIP As Long
   Dim pMacAddress As Long
   ' ãËé Pointer ·ÕèªÕéä»ÂѧµÓá˹觤èÒ·Õèà¡çº MAC Address àÍÒäÇé 6 ªØ´
   Dim bpMacAddress() As Byte
   ' ¡Ó˹´ãËé MAC Address ÁÕ¤ÇÒÁÂÒÇ 6 ªØ´
   Dim pMacAddrLen  As Long
   Dim Count As Long
    
  ' à»ÅÕ蹤èÒ IP à»ç¹¤èÒµÑÇàŢẺ Long ¡è͹ ´éÇ¿ѧ¤ìªÑè¹ inet_addr ãËéÊѧࡵ´éÇÂÇèÒà¨éÒµÑǹÕéÁѹà»ç¹ API
  ' ´Ñ§¹Ñé¹â¤é´¹Õé¨Ö§äÁè¨Óà»ç¹µéͧàÅ×Í¡ãªé§Ò¹ WinSock Control ¹èФÃѺ
   dwRemoteIP = inet_addr(sRemoteIP)
   
    If dwRemoteIP <> 0 Then
   
        ' ¡Ó˹´ªØ´àÅ¢°Ò¹ 16 ¢Í§ MAC Address äÇé 6 µÑÇ (MAC Address ÁѹÁÕ¢¹Ò´ 6 亵ì)
        pMacAddrLen = 6
   
        ' ¤é¹ËÒ Remote MAC Address ´éÇ API32 (¿Ñ§¤ìªÑè¹ SendARP)
        ' ÍèÒ¹ÃÒÂÅÐàÍÕ´à¾ÔèÁàµÔÁ
        ' ARP à»ç¹â»ÃⵤÍÅ ÊÓËÃѺãªéã¹à¤Ã×Í¢èÒÂÃдѺªÑé¹ Data Link Layer (ªÑé¹·Õè 2)
        ' ˹éÒ·Õè¢Í§ ARP ¡Ñºà¤Ã×Í¢èÒ TCP/IP ¤×Í ªèÇÂá»Å§ IP Address ä»ÊÙè Hardware Address
        ' àªè¹ MAC Address «Öè§à»ç¹àÅ¢°Ò¹ 16 ¢¹Ò´ 6 亵ì ËÃ×Í 6 ªØ´æÅÐ 1 亵ì àªè¹ 00-13-D4-9E-5B-DB
        ' ãËéÊѧࡵ´éÇÂÇèÒ SendARP Áѹ¨Ð Return ¤èÒ¡ÅѺà»ç¹µÑÇàÅ¢¨Ó¹Ç¹àµçÁẺ Long
        ' ËÒ¡ÁѹÊ觤èÒ¡ÅѺÁÒ äÁèà·èҡѺ 0 ¹Ñ蹤×Í à¡Ô´ Error ¢Öé¹ÁÒ¹èФÃѺ ¡çãË騺Í͡仨ҡ¿Ñ§¤ìªÑè¹àÅÂ
        ' »Ñ­ËÒà¡Ô´¨Ò¡ÊÒà˵ØËÅÑ¡æ ¤×Í ãÊèËÁÒÂàÅ¢ IP ¼Ô´ä» ËÃ×Í ËÒ IP äÁ辺ã¹Ãкºà¤Ã×Í¢èÒÂ
        If SendARP(dwRemoteIP, 0&, pMacAddress, pMacAddrLen) = 0 Then
      
            ' à§×èÍ¹ä¢ AND ËÒ¡ÍÔ¹¾ØµµÑÇã´µÑÇ˹Öè§à»ç¹ False ¤ÓµÍº¨Ðà»ç¹ False ·Ñ¹·Õ
            If pMacAddress <> 0 And pMacAddrLen <> 0 Then
        
                ' Áѹ¨ÐÁÕ¡ÒÃÊ觤èÒ Pointer à¾×èͪÕéµÓá˹è§à¡çº¢éÍÁÙŢͧ MAC Address
                ' ´Ñ§¹Ñé¹µéͧ¨Ñ´à¡çº¢éÍÁÙÅŧ㹠Array 6 ªØ´ ËÃ×Í 6 µÓá˹è§
                ReDim bpMacAddress(0 To pMacAddrLen - 1)
                
                ' ¤Ñ´ÅÍ¡µÓá˹è§áá ËÃ×Í àÃÔèÁµé¹ (0) ·Õèµéͧ¡ÒêÕéä»ËÒ áÅÐ ¹Ñºä»ÍÕ¡ 6 µÓá˹è§
                ' ªÕéµÓá˹è§à·èÒ¹Ñé¹¹èФÃѺ Êèǹ¤èÒ·Õèà¡çº ¤×Í MAC Address ¢¹Ò´ 1 亵ì (ÃÇÁ¡Ñ¹áÅéÇ 6 µÑÇ)
                ' àªè¹ 00-13-D4-9E-5B-DB áµèÅЪش·Õè¤Ñè¹´éÇÂà¤Ã×èͧËÁÒ - ¨ÐÁÕ¢¹Ò´ 1 亵ì ËÃ×Í 8 ºÔµ
                CopyMemory bpMacAddress(0), pMacAddress, ByVal pMacAddrLen
                
                ' ǹÃͺà¾×èÍËÒ¤èÒáµèÅеÓá˹è§
                For Count = 0 To pMacAddrLen - 1
                
                    
                    ' àªè¹ Åͧ·´Êͺ Debug ´Ùã¹ Immediate Windows ¡ç¨ÐàËç¹µÓáË¹è§ Address ·ÕèªÕéä» àªè¹
                    ' ? VarPtr(bpMacAddress(1))
                    ' ÍèÒ¹¤èÒµÓá˹è§àÅ¢°Ò¹ 10 ¨Ðä´é 140001186 ËÃ×Í
                    ' ? Hex$(VarPtr(bpMacAddress(1)))
                    ' ÍèÒ¹¤èÒµÓá˹è§àÅ¢°Ò¹ 16 ¨Ðä´é  8583 FA2 (¤èÒã¹áµèÅÐà¤Ã×èͧ áÅÐ áµèÅФÃÑ駨Ðä´éäÁèàËÁ×͹¡Ñ¹¹èФÃѺ)
                    ' ËÒ¡ÍÂÒ¡ÃÙé¤èÒ MAC Address àÅ¢°Ò¹ 16 ¡ç¾ÔÁ¾ìã¹Ë¹éÒµèÒ§ Immediate Windows
                    ' ? Hex$(bpMacAddress(1)) ... ¨Ðä´é¤ÓµÍº ¤×Í 13 (àÅ¢°Ò¹ 16)
                    ' ¨Ò¡¹Ñ鹡ç¨ÐàÍÒ¤èÒ·ÕèÍÂÙè Hex$(bpMacAddress(Count)) ã¹µÓá˹觷ÕèªÕé仹Ñé¹ÍÍ¡ÁÒà¡çºã¹µÑÇá»Ã Array
                    ' ¹Õè¤×Í Pointer In The Visual Basic ... ¤×Í ÁѹªÕé仵ÓáË¹è§ Memory Address áµèàÍÒ¤èÒ·ÕèÍÂÙèã¹µÓá˹觹Ñé¹ÁÒ¹èФÃѺ
                    If Count = pMacAddrLen - 1 Then
                        ' à»ç¹ªØ´ÊØ´·éÒ ¨Ö§äÁèµéͧàÍÒà¤Ã×èͧËÁÒ - ÁÒµèÍ·éÒ¤ÃѺ
                        sRemoteMacAddress = sRemoteMacAddress & Right("00" & Hex$(bpMacAddress(Count)), 2)
                    Else
                        ' ÍèÒ¹¤èÒ MAC Address ¨Ò¡ 5 µÑÇáá ... ·ÕèàËç¹â¤é´´éÒ¹ÅèҧẺ¹Õé¡çà¾ÃÒÐ
                        ' ªØ´ááÁѹä´é¤èÒ 0 ÍÍ¡ÁÒà¾Õ§µÑÇà´ÕÂǹèФÃѺ ... µéͧÅͧ Debug ´Ù¨ÐÁͧàËç¹
                        sRemoteMacAddress = sRemoteMacAddress & Right("00" & Hex$(bpMacAddress(Count)) & "-", 3)
                    End If
                
                Next
                
                ' ¤×¹¤èÒ¡ÅѺà»ç¹ True à¾×èÍáÊ´§ÇèÒÊÒÁÒö·Ó§Ò¹ä´é¶Ù¡µéͧ
                If Len(sRemoteMacAddress) > 0 Then GetRemoteMACAddress = True
                
                ' ÍÍ¡¨Ò¡¿Ñ§¤ìªÑè¹ä»ä´éàÅÂ
                Exit Function
                
            Else
                ' à¡Ô´¢éͼԴ¾ÅÒ´ pMacAddress <> 0 And pMacAddrLen <> 0
                ' ¡Ã³Õ AND ... ËÒ¡ Input µÑÇã´µÑÇ˹Öè§à»ç¹ False ¤ÓµÍº¨Ðà»ç¹ False àÊÁÍ
                GetRemoteMACAddress = False
            End If
            
        Else
            ' à¡Ô´¢éͼԴ¾ÅÒ´ SendARP Ê觤èÒ¡ÅѺÁÒà»ç¹ 0
            GetRemoteMACAddress = False
        End If
      
    Else
        ' à¡Ô´¢éͼԴ¾ÅÒ´ dwRemoteIP ·Ó¡ÒÃà»ÅÕ蹤èÒ IP ÁÕ¤èÒà»ç¹ 0
        GetRemoteMACAddress = False
    End If

End Function
Conclusion:
àÃ×èͧ¢Í§ºÔµ 亵ì áÅÐ ÃкºµÑÇàÅ¢ à»ç¹àÃ×èͧ·ÕèÊӤѭÍÂèÒ§ÁÒ¡µèÍ¡ÒþѲ¹Òâ»Ãá¡ÃÁ «Öè§¼Á¡çá»Å¡ã¨àËÁ×͹¡Ñ¹ÇèÒ ÊÔè§·Õè¼ÁàÃÕ¹ÁÒ·Ò§ÊÒªèÒ§ ·ÓäÁÁѹªèҧᵡµèÒ§¡Ñº¤¹·ÕèàÃÕ¹ÁÒ·Ò§ÊÒÂÊÒÁÑ­ àªè¹ àÅ¢°Ò¹µèÒ§æ ËÒ¡àÃÒà¢éÒã¨ã¹àÃ×èͧàÅ¢°Ò¹ 10 ´Õ (»¡µÔ¡çãªé·Ø¡ÇѹÍÂÙèáÅéÇ) Áѹ¡çäÁè¹èÒ¨ÐÁջѭËҡѺàÅ¢°Ò¹Í×è¹æàÅ à¾ÃÒÐÁѹ¡çãªéËÅÑ¡¡ÒÃà´ÕÂǡѹËÁ´ ... ËÃ×Í à¾ÃÒÐàÃÒàÃÕ¹Áҡѹ¼Ô´æ ã¹àÅ¢°Ò¹ 10 á·¹·ÕèàÃҨн֡¹Ñº 0 - 9 áµèà¹Õè´ѹàÃÔèÁãËé¹Ñº 1 - 10 á·¹ Áѹ¡çàŵԴà»ç¹¤ÇÒÁà¤ÂªÔ¹ä» ¾Íà¨ÍàÅ¢°Ò¹Í×è¹æ ¡ÅѺãËéàÃÔèÁ¹Ñº¨Ò¡ 0 àÊÁÍ àªè¹ °Ò¹ 8 ¡ç 0 - 7 °Ò¹ 16 ¡ç¹Ñº¨Ò¡ 0 - 15 ËÃ×Í °Ò¹ 2 ¡ç¹Ñº¨Ò¡ 0 - 1 ... à¨ÍẺ¹Õéà¢éÒ ·Õ¹ÕéÅèÐ仡ѹäÁèà»ç¹àÅ 55555+

¨Õ ·Ù ¨Õ à¹çµ ´Íµ ¤ÍÁ - g2gNet Dot Com
àÅ¢·ÐàºÕ¹¾Ò³ÔªÂìÍÔàÅç¡·Ã͹ԡÊì 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] ËÃ×Í â·Ã. 08-6862-6560