Wiki source code of IPMI
Last modified by Sebastian Marsching on 2022/12/23 00:18
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | {{toc/}} |
| 2 | |||
| 3 | # Finding the IPMI address for a system | ||
| 4 | |||
| 5 | On modern versions of Windows, the IPMI MAC and IP address can be determined without having to instally any software through a [PowerShell script that I found in a blog](https://michlstechblog.info/blog/windows-read-the-ip-address-of-a-bmc-board/): | ||
| 6 | |||
| 7 | ```ps1 | ||
| 8 | # Get the Class instance | ||
| 9 | $oIPMI=Get-WmiObject -Namespace root\WMI -Class MICROSOFT_IPMI | ||
| 10 | # Some constants | ||
| 11 | # <a title="Microsoft In Band Management" href="http://gallery.technet.microsoft.com/scriptcenter/In-Band-Management-using-88e221b8" target="_blank">Source</a> | ||
| 12 | [byte]$BMCResponderAddress = 0x20 | ||
| 13 | [byte]$GetLANInfoCmd = 0x02 | ||
| 14 | [byte]$GetChannelInfoCmd = 0x42 | ||
| 15 | [byte]$SetSystemInfoCmd = 0x58 | ||
| 16 | [byte]$GetSystemInfoCmd = 0x59 | ||
| 17 | [byte]$DefaultLUN = 0x00 | ||
| 18 | [byte]$IPMBProtocolType = 0x01 | ||
| 19 | [byte]$8023LANMediumType = 0x04 | ||
| 20 | [byte]$MaxChannel = 0x0b | ||
| 21 | [byte]$EncodingAscii = 0x00 | ||
| 22 | [byte]$MaxSysInfoDataSize = 19 | ||
| 23 | # Find the first channel | ||
| 24 | [byte[]]$RequestData=@(0) | ||
| 25 | $oMethodParameter=$oIPMI.GetMethodParameters("RequestResponse") | ||
| 26 | $oMethodParameter.Command=$GetChannelInfoCmd | ||
| 27 | $oMethodParameter.Lun=$DefaultLUN | ||
| 28 | $oMethodParameter.NetworkFunction=0x06 | ||
| 29 | $oMethodParameter.RequestData=$RequestData | ||
| 30 | $oMethodParameter.RequestDataSize=$RequestData.length | ||
| 31 | $oMethodParameter.ResponderAddress=$BMCResponderAddress | ||
| 32 | # http://msdn.microsoft.com/en-us/library/windows/desktop/aa392344%28v=vs.85%29.aspx | ||
| 33 | $RequestData=@(0) | ||
| 34 | [Int16]$iLanChannel=0 | ||
| 35 | [bool]$bFoundLAN=$false | ||
| 36 | for(;$iLanChannel -le $MaxChannel;$iLanChannel++){ | ||
| |
2.1 | 37 | $RequestData=@($iLanChannel) |
| 38 | $oMethodParameter.RequestData=$RequestData | ||
| 39 | $oMethodParameter.RequestDataSize=$RequestData.length | ||
| 40 | $oRet=$oIPMI.PSBase.InvokeMethod("RequestResponse",$oMethodParameter,(New-Object System.Management.InvokeMethodOptions)) | ||
| 41 | #$oRet | ||
| 42 | if($oRet.ResponseData[2] -eq $8023LANMediumType){ | ||
| 43 | $bFoundLAN=$true | ||
| 44 | break; | ||
| 45 | } | ||
| |
1.1 | 46 | } |
| 47 | # If the LAN channel was found, get the network parameters | ||
| 48 | $oMethodParameter.Command=$GetLANInfoCmd | ||
| 49 | $oMethodParameter.NetworkFunction=0x0c | ||
| 50 | if($bFoundLAN){ | ||
| 51 | $RequestData=@($iLanChannel,3,0,0) | ||
| 52 | $oMethodParameter.RequestData=$RequestData | ||
| 53 | $oMethodParameter.RequestDataSize=$RequestData.length | ||
| 54 | $oRet=$oIPMI.PSBase.InvokeMethod("RequestResponse",$oMethodParameter,(New-Object System.Management.InvokeMethodOptions)) | ||
| 55 | write-host ("IP Address: "+$oRet.ResponseData[2]+"."+$oRet.ResponseData[3]+"."+$oRet.ResponseData[4]+"."+ $oRet.ResponseData[5] ) | ||
| 56 | $RequestData=@($iLanChannel,6,0,0) | ||
| 57 | $oMethodParameter.RequestData=$RequestData | ||
| 58 | $oMethodParameter.RequestDataSize=$RequestData.length | ||
| 59 | $oRet=$oIPMI.PSBase.InvokeMethod("RequestResponse",$oMethodParameter,(New-Object System.Management.InvokeMethodOptions)) | ||
| 60 | write-host ("Subnet Mask: "+$oRet.ResponseData[2]+"."+$oRet.ResponseData[3]+"."+$oRet.ResponseData[4]+"."+ $oRet.ResponseData[5] ) | ||
| 61 | $RequestData=@($iLanChannel,5,0,0) | ||
| 62 | $oMethodParameter.RequestData=$RequestData | ||
| 63 | $oMethodParameter.RequestDataSize=$RequestData.length | ||
| 64 | $oRet=$oIPMI.PSBase.InvokeMethod("RequestResponse",$oMethodParameter,(New-Object System.Management.InvokeMethodOptions)) | ||
| 65 | # Format http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx | ||
| 66 | write-host ("MAC Address: "+("{0:x2}:{1:x2}:{2:x2}:{3:x2}:{4:x2}:{5:x2}" -f $oRet.ResponseData[2], $oRet.ResponseData[3],$oRet.ResponseData[4], $oRet.ResponseData[5], $oRet.ResponseData[6], $oRet.ResponseData[7])) | ||
| 67 | } | ||
| 68 | ``` |