mac adresse ermitteln

  • VB6

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von franky.

    hallo,

    ich habe mit dem ermitteln der mac-adresse nun doch noch ein problem! ich verwende folgenden code:

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

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



    Private Sub Form_Activate()
    Dim usrNcb As NCB
    Dim btRet As Byte
    Dim usrASTAT As ASTAT
    Dim lngRet As Long
    Dim strMacAdr As String
    Dim strBuffer As String
    Dim i As Integer
    usrNcb.ncb_command = NCBRESET
    btRet = Netbios(usrNcb)
    usrNcb.ncb_command = NCBASTAT
    usrNcb.ncb_lana_num = 0
    usrNcb.ncb_callname = "* "
    usrNcb.ncb_length = Len(usrASTAT)
    lngRet = HeapAlloc(GetProcessHeap(), _
    HEAP_GENERATE_EXCEPTIONS Or _
    HEAP_ZERO_MEMORY, usrNcb.ncb_length)
    If lngRet <> 0 Then
    usrNcb.ncb_buffer = lngRet
    btRet = Netbios(usrNcb)
    CopyMemory usrASTAT, usrNcb.ncb_buffer, Len(usrASTAT)

    For i = 0 To 5
    strBuffer = Hex$(usrASTAT.adapt.adapter_address(i))
    strMacAdr = strMacAdr & IIf(Len(strBuffer) = 2, _
    strBuffer, "0" & strBuffer) & " "
    Next i

    HeapFree GetProcessHeap(), 0, lngRet
    End If

    If Len(strMacAdr) Then
    Me.Caption = "Mac Adr.: " & Trim$(strMacAdr)
    Else
    Me.Caption = "? ? ? ? ? ?"
    End If

    Me.Move (Screen.Width - Me.Width) \ 2, _
    (Screen.Height - Me.Height) \ 2, Screen.Width \ 3, 0

    End Sub



    Private Sub Form_Load()
    Me.BorderStyle = 3
    End Sub


    damit kann ich mir auf einigen rechnern die mac-adresse anzeigen lassen, aber nicht auf allen. an meinem arbeitsplatz (w2k) steht als mac-adresse nur:

    00-00-00-00-00-00

    an anderen rechnern funktioniert das prog einwandfrei... zum verzweifeln X(

    das problem habe ich unter win95/98, winnt und w2k - egal welche karte in den rechner eingebaut ist (3com, intel...)

    gruss

    franky

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „franky“ ()

    hi folks,

    ich komme mit dem problem einfach nicht weiter...
    hat jemand noch einen anderen lösungsvorschlag??
    ich kann nicht nachvollziehen, warum ich auf einem rechner die korrekte mac adresse erhalte und auf einem anderen rechner (gleiche modell, gleiche betriebsystem) nicht X(

    gruss

    franky
    Du solltest mal den Rückgabewert der API
    Funktionen überprüfen und, sofern die
    Fehlschlagen, mit Err.LastDLLError die Fehlernummer
    und mit Error$(Err.LastDLLError) die dazugehörige
    Fehlerbeschreibung ermitteln, vielleicht kommst du
    dann weiter.
    ich erhalte folgende fehlermeldung:

    an meinem arbeitsplatz erhalte ich folgende fehler:

    Debug.Print Err.LastDllError --> 87
    Debug.Print Error$(Err.LastDllError) --> Application-defined or object-defined error

    hier wird mir als mac adresse ausgegeben: 00-00-00-00-00-00

    an einem anderen arbeitsplatz erhalte ich die gleichen fehler, bekomme aber die korrekte mac adresse X(

    im dos-fenster kann ich mir die mac adresse mit ipconfig /all anzeigen lassen...


    gruss

    franky
    hallo,

    ich habe mir grade bei microsoft ein tool heruntergeladen (getmac). mit diesem tool werden mir 3 mac-adressen ausgegeben:

    00-07-e9-44-32-51 \device\nwlnknb
    00-00-00-00-00-00 \device\netbiossmb
    00-07-e9-44-32-51 \device\netbt_tcpip_{....}

    bei der api funktion wird immer die netbiossmb ausgelesen. wie kann ich ein anderes device angeben???

    gruss

    franky