Recuperer la mac adresse

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 666 fois - Téléchargée 88 fois


Contenu du snippet

Faites un Form(Form1) avec Bouton(Command1)
Malheureusement le source n'était pas commenté et je ne sais pas qui en est l'auteur
En tout cas, il fonctionne bien

Source / Exemple :


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
   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

A voir également

Ajouter un commentaire

Commentaires

Votre site est excellent.
bonne continuation.
cs_Ben
Messages postés
1
Date d'inscription
dimanche 30 décembre 2001
Statut
Membre
Dernière intervention
30 décembre 2001
-
Bonjour,

J'ai un petit souci avec ce code... en effet il m'indique n'importe quoi sous win95...
J'utilise VB5 et pourtant il marche tres bien avec win98...
Pourriez vous m'indiquer s'il existe une solution à ce problème ?

D'avance merci et bravo pour ce superbe site...

Ben
cs_kilyn
Messages postés
21
Date d'inscription
vendredi 1 février 2002
Statut
Membre
Dernière intervention
28 février 2002
-
Salut !

J'ai trouvé sur "microsoft.fr" en tapant le mot clé "mac" dans la zone de recherche de la page d'accueil un meilleur code pour récupérer la mac adresse. Ce prog marche sur toutes les versions de windows. Mais je sais pas s'il est valable sous VB5 car je l'ai programmé en VB6.

Mais je te le donne quand même au cas où ça pourrait servir :

'A mettre dans un module
Public Const NCBASTAT As Long = &H33
Public Const NCBNAMSZ As Long = 16
Public Const NCBRESET As Long = &H32

Public 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

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 Function MACAddress() As String
Dim macAdr As String
Dim ncb As NET_CONTROL_BLOCK
Dim adapter As ASTAT

ncb.ncb_command = NCBRESET
Call Netbios(ncb)

ncb.ncb_command = NCBASTAT
ncb.ncb_lana_num = 0
ncb.ncb_callname = "* "
ncb.ncb_buffer = VarPtr(adapter)
ncb.ncb_length = Len(adapter)

Call Netbios(ncb) 'renvoie entre autre la mac adresse dans une structure
For i = 0 To 5
macAdr = macAdr & Format$(Hex(adapter.adapt.adapter_address(i)), "00") & " "
Next i

macAdr = Trim(macAdr) 'Enlève les espces à droite et à gauche de la chaîne
MACAddress = macAdr

End Function

Private Sub Form_load()
MsgBox MACAddress
End Sub
cs_Marcial
Messages postés
59
Date d'inscription
samedi 3 mai 2003
Statut
Membre
Dernière intervention
31 juillet 2008
-
slt,
Quelqu'un sait-il comment récupérer une adresse Mac provenant d'une éventuelle seconde carte reseau ?
cs_spet
Messages postés
15
Date d'inscription
jeudi 19 octobre 2000
Statut
Membre
Dernière intervention
14 mars 2005
-
Salut tout le monde...

Je viens de tester vos deux programmes pour recuperer l'adresse Mac.
J'ai un probléme sur une machine...
En effet, l'@ de la carte est : 00 02 A5 0A 88 4C

et par le prog, j'obtiens: 00 02 A5 A 88 4C

Il me manque un chiffre... :(
Quelqu'un serait ce qui se passe???

Merci de votre aide.

Spet.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.