ipmitool 是一種可用在 linux 系統下的命令行方式的 ipmi 平台管理工具,它支持 ipmi 1.5 規范(最新的規范為 ipmi 2.0),通過它可以實現獲取傳感器的信息、顯示系統日志內容、網絡遠程開關機等功能
- 環境搭建
安裝python:
在python官網下載安裝文件,選擇windows的安裝包
安裝過程可以直接加入path,也可以安裝完后加上環境變量
安裝ipmitool:
解壓IPMItool.rar
加入環境變量中,如上圖
在cmd查看python,ipmitool是否在path上:
2.代碼
import os for i in open(r'G:\My Documents\Desktop\ip.txt'): odip=i.split("/")[0] newip=i.split("/")[1] gwip=i.split("/")[2] USER=i.split("/")[3] PASSWD=i.split("/")[4] #os.system("ipmitool -I lanplus -H " + odip+" -U "+USER+" -P "+PASSWD+" lan set 3 netmask 255.255.254.0") #os.system("ipmitool -I lanplus -H " + odip+" -U "+ USER+" -P "+PASSWD +" lan set 3 ipaddr "+ newip) os.system("ipmitool -I lanplus -H " + newip+" -U"+ USER+" -P "+PASSWD +" lan set 3 defgw ipaddr "+ gwip) #print(newip) #print("ipmitool -I lanplus -H "+odip+" -U "+USER+" -P "+PASSWD+" lan set 1 netmask 255.255.254.0") #print("ipmitool -I lanplus -H " + odip+" -U "+ USER+" -P "+PASSWD +" lan set 3 ipaddr "+ newip)
ip.txt文件形式:
odip1/newip1/gwip/PASSWD
odip2/newip2/gwip/PASSWD
......
4.成果截圖:
設置掩碼:
設置帶外ip:
前一個執行是print(查看是否代碼寫的有誤),后一個執行是修改帶外ip
設置網關:
5.代碼解析:
Python部分:
a.import導入模塊
把import os導入模塊放到開頭,使作用域在全局中可以使用
b.Os模塊: os模塊就是對操作系統進行操作, 顯示結果,os模塊包含普遍的操作系統功能,與具體的平台無關
os.system():運行命令
>>>os.system('cmd') #Windows下打開終端
c.split()函數:Python中有split()函數
拆分字符串。通過指定分隔符對字符串進行切片,並返回分割后的字符串列表(list)
語法:str.split(str="",num=string.count(str))[n]
參數說明:
str:表示為分隔符,默認為空格,但是不能為空('')。若字符串中沒有分隔符,則把整個字符串作為列表的一個元素
num:表示分割次數。如果存在參數num,則僅分隔成 num+1 個子字符串,並且每一個子字符串可以賦給新的變量
[n]:表示選取第n個分片
Ipmitool部分:
ipmitool遠程使用命令:
pmitool -H 192.168.180.201 -U root -P opendoor -I lan command 其中-H表示后面跟的是服務器的地址,-U表示后面跟着用戶名,-P表示后面跟着用戶密碼,command與本地獲取信息相同
-l lan:
不同廠商的設備對於信道不同,版本不同
Lan或lanplus,本地及用open
ipmitool命令需要通過相應的interface來訪問BMC,在本地獲取信息時候采用的是-I open,即為OpenIPMI接口,IPMItool命令包含的接口有open、lan、lanplus。其中open是指的是OpenIPMI與BMC通信,lan是通過Ethernet LAN request/resoponse消息,消息具有一個IPMI session頭和RMCP頭。采用IPV4的udp協議與BMC通信。UDP的數據段包含了IPMI 。IPMI使用Remote Management Control Protocol (RMCP) 版本1支持操作系統關閉(pre-OS和OS-absent),RMCP把把數據發送到UDP的623端口。像lan接口一樣,lanplus同樣使用Ethernet LAN的UDP協議與BMC通信,但是lanplus使用rmcp+協議(在IPMIV2.0中描述)來通信,RMCP+允許使用改經的認證方式和數據完整性檢查。
Open端口用於本地監控系統使用的,lan/lanplus通過網絡進行遠程監控。
IP網絡設置:
說明:[ChannelNo] 字段是可選的,不同廠商設備不同,可能為1或3
設置網絡參數,必須首先設置IP為靜態,然后再進行其他設置;
a. 查看網絡信息:
ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登錄用戶名) -P (BMC 登錄用戶名的密碼) lan print [ChannelNo]
b. 修改IP為靜態還是DHCP模式:
ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登錄用戶名) -P (BMC 登錄用戶名的密碼) lan set <ChannelNo> ipsrc <static/dhcp>
c. 修改IP地址:
ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登錄用戶名) -P (BMC 登錄用戶名的密碼) lan set <ChannelNo> ipaddr <IPAddress>
d. 修改子網掩碼:
ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登錄用戶名) -P (BMC 登錄用戶名的密碼) lan set <ChannelNo> netmask <NetMask>
e. 修改默認網關:
ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登錄用戶名) -P (BMC 登錄用戶名的密碼) lan set <ChannelNo> defgw ipaddr <默認網關>
###注意
腳本執行時,可以用print打出要執行的ipmitool命令,確認windows環境下無中文及命令正確。期間可以用#來注釋
該代碼通過split截取ip.txt的舊帶外地址odip,新地址newip等
如果執行過程很快,可以使用import time
在for循環外圍使用time.sleep(10000)來看結果
import os import time for i in open(r'c:\Users\Desktop\ip.txt'): ip=i.split("/")[1] newip=i.split("/")[2] print(ip) print(newip) #print("echo " + ip + " >> C:\\Users\\Desktop\\sn.txt") #os.system("echo " + ip + " >> C:\\Users\\Desktop\\sn.txt") #hp惠普服務器 #print("ipmitool -I lanplus -H " + ip+" -U admin -P adminpasswd lan set 2 ipaddr "+ newip) #os.system("ipmitool -I lanplus -H "+ ip + " -U admin -P adminpasswd fru | find \"Chassis Serial\" >> C:\\Users\\ffcs\\Desktop\\sn.txt") #os.system("ipmitool -I lanplus -H "+ ip + " -U admin -P password fru | find \"Chassis Serial\" >> C:\\Users\\ffcs\\Desktop\\sn.txt") #os.system("ipmitool -I lanplus -H " + ip+" -U admin -P adminpasswd lan set 2 netmask 255.255.254.0") #os.system("ipmitool -I lanplus -H " + ip+" -U admin -P adminpasswd lan set 2 ipaddr "+ newip) #os.system("ipmitool -I lanplus -H " + ip+" -U admin -P adminpasswd lan set 2 defgw ipaddr 10.241.40.1") os.system("ipmitool -I lanplus -H "+ip+" -U admin -P adminpasswd mc reset cold") #huawei服務器 #os.system("ipmitool -I lanplus -H "+ ip + " -U root -P Huawei12#$ fru | find \"Product Serial\" >> C:\\Users\\ffcs\\Desktop\\sn.txt") #print("ipmitool -I lanplus -H " + ip+" -U root -P Huawei12#$ lan set 1 ipaddr "+ newip) #os.system("ipmitool -I lanplus -H " + ip+" -U root -P Huawei12#$ lan set 1 netmask 255.255.254.0") #os.system("ipmitool -I lanplus -H " + ip+" -U root -P Huawei12#$ lan set 1 ipaddr "+ newip) time.sleep(100)