Offline IP zu MAC und Hersteller Konverter

  • Hallo,
    hab mal wieder ein kleines Projekt, für eine Anwendung, die ich öfters benötige. Ip2Mac&Vendor ermittelt aus der eingegebenen IP-Adresse die dazugehörige MAC-Adresse (SendARP) und daraus wird über eine Text-Datenbank der Herrsteller herausgesucht. Wer dazu noch eine passendes RegExp hat, bitte gerne melden.

    Hier der Code als Demo ohne ganze Datenbank und im Anhang das volle Skript..
    Viel Spaß!

    Spoiler anzeigen
    [autoit]

    ;;funkey 2014.07.24
    ;;OUI – Organizationally Unique Identifier
    Global Const $sTitle = "IP2MAC&Vendor Offline demo"

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

    Global $sIpDefault = @IPAddress1

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

    Global $sIP = InputBox($sTitle, "Please enter IP address to fetch information about device", $sIpDefault)
    If @error Or $sIP = "" Then
    Exit
    EndIf

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

    Global $sMAC = _SendARP($sIP)
    If @error Then
    MsgBox(16, $sTitle, "Error fetching MAC address from IP address '" & $sIP & "'" & @LF & $sMAC)
    Exit
    EndIf

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

    Global $sOUI = _oui()
    Global $sMacSearchPart = " " & StringLeft($sMAC, 8)

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

    Global $iVendorPos = StringInStr($sOUI, $sMacSearchPart)
    If $iVendorPos = 0 Then
    MsgBox(16, $sTitle, "Error fetching information from MAC address '" & $sMAC & "'." & @LF & "No entry in database.")
    Exit
    EndIf

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

    Global $sVendor = StringMid($sOUI, $iVendorPos, 512)
    $sVendor = StringTrimLeft($sVendor, StringInStr($sVendor, @CRLF) + 25)
    $sVendor = StringLeft($sVendor, StringInStr($sVendor, @CRLF & @CRLF))
    $sVendor = StringReplace($sVendor, @TAB, "")
    $sVendor = StringReplace($sVendor, " ", "")

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

    MsgBox(64, $sTitle, "Info about IP: " & $sIP & @LF & @LF & _
    "MAC-Address: " & $sMAC & @LF & @LF & _
    $sVendor)

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

    Func _inet_addr($sIP)
    Local $aRet = DllCall("ws2_32.dll", "ULONG", "inet_addr", "str", $sIP)
    Return $aRet[0]
    EndFunc ;==>_inet_addr

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

    Func _SendARP($DestIP)
    Local $DestAddress = _inet_addr($DestIP)
    If $DestAddress = 0xFFFFFFFF Then Return SetError(1, 0, "INVALID_IP_ADDRESS")
    Local $tMacAddr = DllStructCreate("BYTE[8]")
    Local $aRet = DllCall("Iphlpapi.dll", "DWORD", "SendARP", "ULONG", $DestAddress, "ULONG", 0, "struct*", $tMacAddr, "ULONG*", 8)
    Local $sMAC = ""
    Switch $aRet[0]
    Case 0
    For $i = 1 To $aRet[4] - 1
    $sMAC &= Hex(DllStructGetData($tMacAddr, 1, $i), 2) & "-"
    Next
    $sMAC &= Hex(DllStructGetData($tMacAddr, 1, $i), 2)
    Return $sMAC
    Case 31
    Return SetError(2, $aRet[0], "ERROR_GEN_FAILURE")
    Case 87
    Return SetError(3, $aRet[0], "ERROR_INVALID_PARAMETER")
    Case 1784
    Return SetError(4, $aRet[0], "ERROR_INVALID_USER_BUFFER")
    Case 67
    Return SetError(5, $aRet[0], "ERROR_BAD_NET_NAME")
    Case 1168
    Return SetError(6, $aRet[0], "ERROR_NOT_FOUND")
    EndSwitch
    EndFunc ;==>_SendARP
    #cs
    https://standards.ieee.org/develop/regauth/oui/oui.txt
    #ce

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

    Func _oui()
    Local $o = " Generated: Wed, 23 Jul 2014 05:00:03 -0400" & @CRLF & _
    "" & @CRLF & _
    " OUI/MA-L Organization" & @CRLF & _
    " company_id Organization" & @CRLF & _
    " Address" & @CRLF & _
    " " & @CRLF & _
    " " & @CRLF & _
    " 00-00-00 (hex) XEROX CORPORATION" & @CRLF & _
    " 000000 (base 16) XEROX CORPORATION" & @CRLF & _
    " M/S 105-50C" & @CRLF & _
    " 800 PHILLIPS ROAD" & @CRLF & _
    " WEBSTER NY 14580" & @CRLF & _
    " UNITED STATES" & @CRLF & _
    "" & @CRLF & _
    " 00-00-01 (hex) XEROX CORPORATION" & @CRLF & _
    " 000001 (base 16) XEROX CORPORATION" & @CRLF & _
    " ZEROX SYSTEMS INSTITUTE" & @CRLF & _
    " M/S 105-50C 800 PHILLIPS ROAD" & @CRLF & _
    " WEBSTER NY 14580" & @CRLF & _
    " UNITED STATES" & @CRLF & _
    "" & @CRLF
    Return $o
    EndFunc ;==>_oui

    [/autoit]
  • Hi super Code.
    Habe eine frage:

    Muss die Datei immer konvertiert werden?

    weil in deiner Datei ist es ja der Fall und es funktioniert ja auch aber bei deinem Script Anhang sieht ja der Code so aus.

    oder kann man auch einer andere variante wählen so das z.b. ein online abgleich mit der aktuellen list "http://standards-oui.ieee.org/oui.txt" durchgeführt wird