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
;;funkey 2014.07.24
;;OUI – Organizationally Unique Identifier
Global Const $sTitle = "IP2MAC&Vendor Offline demo"
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
Global $sMAC = _SendARP($sIP)
If @error Then
MsgBox(16, $sTitle, "Error fetching MAC address from IP address '" & $sIP & "'" & @LF & $sMAC)
Exit
EndIf
Global $sOUI = _oui()
Global $sMacSearchPart = " " & StringLeft($sMAC,
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
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, " ", "")
MsgBox(64, $sTitle, "Info about IP: " & $sIP & @LF & @LF & _
"MAC-Address: " & $sMAC & @LF & @LF & _
$sVendor)
Func _inet_addr($sIP)
Local $aRet = DllCall("ws2_32.dll", "ULONG", "inet_addr", "str", $sIP)
Return $aRet[0]
EndFunc ;==>_inet_addr
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*",
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
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