最近工作需要在用ipmitool查询服务器硬件信息。ipmitool查询硬件信息
比如电源,使用命令:
获取PSU0信息:Ipmitool raw 0x3a 0x71 0x00:
获取PSU1信息:Ipmitool raw 0x3a 0x71 0x01:
但是得到的信息是这样的:
完全没有可读性,这些数字是16进制的ascii,平时我们看到的ascii都是10进制的,0—255,这里转化成16进制了。
想要知道对应的信息,刚开始想着要先把16进制转化为10进制,在转化成对应的ascii字符,网上找了之后发现完全没必要。
方法一:python中有一个方法:decode ,该 方法允许以指定的编码格式解码字符串。可以这样如图:
这样就能够把16进制转化成ascii了,具体用法百度吧。不过此方法因为有反斜杠,容易导致python的反斜杠陷阱。
方法二:
a='4d'
binascii.a2b_hex(a)
也能够转化成对应的字符。使用该方法前首先导入binascii模块:import binascii
另外上面ipmi输出的信息对应表如下:
位置(从0开始) | 长度 | 数据格式 | 文字描述 | 实例解析 |
第0位 | 1 | 16进制整数 | 电源编号 | 解析前:00 - PSU0 解析后:(01: PSU1) |
第2位 | 1 | 16进制整数 | 电源状态 | 00 -正常 |
第21-28位 | 8 | 字符串(ASCII) | 版本 | 解析前:30 2e 32 35 30 00 00 00 解析后:-0.250 |
第29-44位 | 16 | 字符串(ASCII) | 电源型号 | 44 50 53 2d 31 36 30 30 41 42 2d 37 20 41 00 00
-DPS-1600AB-7 A |
61-76 | 16 | 字符串(ASCII) | SN序列号 | 解析前:48 47 41 41 41 34 34 35 30 30 30 30 33 34 00 00 解析后:-HGAA1445000034 |
|
|
|
|
|