'=========================================================================
' GetIPInfo.vbs
' VERSION: 1.0
' AUTHOR: Brian Steinmeyer
' EMAIL: sigkill@sigkillit.com
' WEB: https://sigkillit.com
' DATE: 1/1/2011
' COMMENTS: Input a Computer DNS/IP, which then Clears the Current Arp Cache,
' Gets the IP of the DNS/IP, and then gets the MAC address of the DNS/IP.
' EXAMPLE: Wscript.Echo GetIPInfo("Computer")
'=========================================================================
Option Explicit
Wscript.Echo GetIPInfo("Computer")
Private Function GetIPInfo(strComputerOrIP)
On Error Resume Next
Dim strResult: strResult = ""
Call ClearARP()
' Get IP of Host Name
Dim strIP: strIP = GetIP(strComputerOrIP)
' Get MAC of Host Name
Dim strArp: strArp = GetMAC(strIP)
GetIPInfo = strComputerOrIP & vbTab & strIP & vbTab & strArp
On Error Goto 0
End Function
' **************************************************************************************************
' Sub ClearARP - Clears the ARP Cache
' **************************************************************************************************
Private Sub ClearARP()
On Error Resume Next
' Clear ARP Cache
Dim objShell: Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("netsh interface ip delete arpcache")
' Kill Objects
Set objShell = Nothing
On Error Goto 0
End Sub
' **************************************************************************************************
' Function GetIP - Returns an IP From Passing an Host Name or IP Into the Function
' ********************************************************************
Private Function GetIP(strHost)
On Error Resume Next
' Ping Host and Extract IP Address
Dim objShell: Set objShell = WScript.CreateObject("WScript.Shell")
Dim objPing: Set objPing = objShell.Exec("%comspec% /c For /f " & chr(34) & "tokens=2 delims=[]" & chr(34) & " %A In ('Ping -a -n 1 " & strHost & "') Do %A")
Dim strPingResults: strPingResults = objPing.StdOut.ReadAll
' Search For an IP Address from Results
Dim RegEx: Set RegEx = New RegExp
RegEx.IgnoreCase = True
RegEx.Global = True
RegEx.Pattern = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
If Regex.Test(strPingResults) = True then
Dim Matches: Set Matches = RegEx.Execute(strPingResults)
Dim strMatch
For Each strMatch in Matches
' Return Result
GetIP = strMatch
Next
Else
GetIP = "!~ERROR~!"
End If
' Kill Objects
Set objShell = Nothing
On Error Goto 0
End Function
' **************************************************************************************************
' Function GetMAC - Returns a MAC Address From Passing an IP Into the Function
' ********************************************************************
Private Function GetMAC(strIP)
On Error Resume Next
' Check ARP Table and Results
Dim objShell: Set objShell = WScript.CreateObject("WScript.Shell")
Dim objArp: Set objArp = objShell.Exec("arp -a " & strIP)
Dim strArpResult: strArpResult = objArp.StdOut.ReadAll
' Search For a MAC Address from Results
Dim RegEx: Set RegEx = New RegExp
RegEx.IgnoreCase = True
RegEx.Global = True
RegEx.Pattern = "[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}"
If Regex.Test(strArpResult) = True then
Dim Matches: Set Matches = RegEx.Execute(strArpResult)
Dim strMatch
For Each strMatch in Matches
GetMAC = strMatch
Next
Else
GetMAC = "!~ERROR~!"
End if
' Kill Objects
Set objShell = Nothing
On Error Goto 0
End Function