MAC Adresse

  • Hey leute,

    ich habe vor langem mal diesen Scirpt gefunden...

    [autoit]


    Func _GetMacAddress($_phisycaladdress)
    Local $chk_1 = StringReplace($_phisycaladdress, '.', '') / 1
    If @extended <> 3 Or $chk_1 < 1 Then Return ''
    Local $chk_2 = StringSplit($_phisycaladdress, '.', 1)
    For $idx_chk = 1 To $chk_2[0]
    If ($chk_2[$idx_chk] / 1) < 0 or ($chk_2[$idx_chk] / 1) > 255 Then Return ''
    Next
    Local $_buf = ''
    Local $_pid = Run('nbtstat -a ' & $_phisycaladdress, '', @SW_HIDE, 2)
    Do
    $_buf &= StdoutRead($_pid)
    Until @error
    If StringReplace($_buf, 'MAC Adresse = ', '') <> $_buf Then
    $chk_3 = StringSplit($_buf, 'MAC Adresse = ', 1)
    Return StringReplace(StringReplace($chk_3[2], @CR, ''), @LF, '')
    EndIf
    Return ''
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    $ipadresse=@IPAddress1
    $mac=_GetMacAddress($ipadresse)
    msgbox(0,"Ausgabe der MAC Adresse",$mac)

    [/autoit]


    Doch leider funktioniert dieser nicht so richtig..

  • Spoiler anzeigen
    [autoit]

    #include <array.au3> ; wird nur für _ArrayDisplay benötigt
    Global $networkadapter [1] [2]
    _GetNetworkadapterInf ()
    _ArrayDisplay ($networkadapter)

    [/autoit] [autoit][/autoit] [autoit]

    ;Auslesen der Netzwerkadapter:
    ; Selbstbestimmter Name
    ; int. Beschreibung
    ; IP Adresse
    Func _GetNetworkadapterInf ()
    $x = 0
    $strComputer = "Localhost"
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter")
    For $objItem In $colItems
    $networkadapter [$x] [0] = $objitem.Name
    $networkadapter [$x] [1] = $objItem.MACAddress
    $x += 1
    Redim $networkadapter [$x + 1] [2]
    Next
    EndFunc

    [/autoit]

    Aus : [ offen ] Mac Addresse Auslesen

    -

  • Nur von der Hauptnetzwerkkarte sprich von der wo auch die IP Adresse abgeht. (Internet Verbindung)

  • Teste mal folgendes:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, @IPAddress1, _GetMacAdresseFromIP(@IPAddress1))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetMacAdresseFromIP(Const $IP)
    Local $s_CMD = _GetDOSReturn("ipconfig", "/all")
    Local $MAC, $b_Found = False
    Local $a_IPRegEx

    [/autoit] [autoit][/autoit] [autoit]

    $a_Adapter = StringRegExp($s_CMD, "(?m)^\s*.+(?:\r\n){2}(?s)(.+?)(?:\r\n){2}", 3)

    [/autoit] [autoit][/autoit] [autoit]

    For $i In $a_Adapter
    $a_Props = StringRegExp($i, "(?m)^\s*([^:]+?)[\.\s]+:\s([^\r\n]+)", 4)

    [/autoit] [autoit][/autoit] [autoit]

    $MAC = ""
    For $x In $a_Props
    If StringRegExp($x[2], "^[[:xdigit:]]{2}(?:-[[:xdigit:]]{2}){5}$") Then $MAC = $x[2]
    $a_IPRegEx = StringRegExp($x[2], "((?:[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})\D", 3)
    If IsArray($a_IPRegEx) Then
    If $a_IPRegEx[0] = $IP Then $b_Found = True
    EndIf
    Next
    If $b_Found Then
    If $MAC = "" Then
    Return SetError(2, $IP, -1)
    Else
    Return $MAC
    EndIf
    EndIf
    Next
    Return SetError(1, $IP, -1)
    ;by AspirinJunkie
    EndFunc ;==>_GetMacAdresseFromIP

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GetDOSReturn($sCMD, $sParameter = '')
    Local $sPara = '', $sReturn = '', $sline
    If $sParameter <> '' Then $sPara = ' ' & $sParameter
    Local $iPID = Run($sCMD & $sPara, '', @SW_HIDE, 2)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $sline = StdoutRead($iPID)
    If @error Then ExitLoop
    $sReturn &= $sline
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Return $sReturn
    EndFunc

    [/autoit]

    Alternativ:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, @IPAddress1, GetMACFromIP(@IPAddress1))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func GetMACFromIP(Const $s_IP)
    Local Static $o_WMI = ObjGet("winmgmts:\\localhost\root\CIMV2")
    If @error Or Not IsObj($o_WMI) Then Return SetError(1, @error, -1)

    [/autoit] [autoit][/autoit] [autoit]

    For $x In $o_WMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE ((MACAddress Is Not NULL) AND IPEnabled=TRUE)", "WQL", 48)
    If $x.IPAddress(0) = $s_IP Then Return $x.MACAddress
    Next
    Return SetError(2,$s_IP, -1)
    EndFunc

    [/autoit]

    2. Alternative:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, @IPAddress1, _GetMACFromIP(@IPAddress1))

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMACFromIP($sIP, $seperator=":")
    ; by Ejoc, BitBoy
    Local $MAC, $MACSize
    Local $i, $s, $r, $iIP
    $seperator = String($seperator)
    If $seperator = "" Then
    $seperator = ":"
    ElseIf $seperator = "0" Then
    $seperator = ""
    EndIf
    $MAC = DllStructCreate("byte[6]")
    $MACSize = DllStructCreate("int")
    DllStructSetData($MACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", "str", $sIP)
    $iIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $iIP, "int", 0, "ptr", DllStructGetPtr($MAC), "ptr", DllStructGetPtr($MACSize))
    $s = ""
    For $i = 0 To 5
    If $i Then $s = $s & $seperator
    $s = $s & Hex(DllStructGetData($MAC, 1, $i + 1), 2)
    Next
    If $s = "00" & $seperator & "00" & $seperator & "00" & $seperator & "00" & $seperator & "00" & $seperator & "00" Then $s = 0
    Return $s
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von AspirinJunkie (6. September 2011 um 16:14)