H3C设备服务器采集参数认证过程(包含redfish和res
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,该脚本针对H3C服务器分别对redfish和restfull两种协议的认证方式进行测试,并合并。有三个类,分别是redfish协议测试、restfull协议测试、以及两个合并测试文章最后使用redfi
千家信息网最后更新 2025年02月01日H3C设备服务器采集参数认证过程(包含redfish和res
该脚本针对H3C服务器分别对redfish和restfull两种协议的认证方式进行测试,并合并。
有三个类,分别是redfish协议测试、restfull协议测试、以及两个合并测试
文章最后使用redfish模块简单进行认证访问测试。
import requestsimport jsonrequests.packages.urllib3.disable_warnings()'''以下有三个类,分别是redfish协议测试、restfull协议测试、以及两个合并测试。'''##redfish认证过程和获取参数class redfish_getinfo(object): def __init__(self,ipaddr,username,password): self.ip=ipaddr.strip() self.URLprefix='https://'+ipaddr.strip() self.username=username.strip() self.password=password.strip() global token token=0 tokenurl=self.URLprefix+'/redfish/v1/SessionService/Sessions' print(tokenurl) data={ "UserName":self.username, "Password":self.password } header={ "Content-Type":"application/json" } re1=requests.post(tokenurl,json.dumps(data),headers=header,verify=False) print (re1.status_code) if re1.status_code == 201: print ('redfish_info',re1.json()) print ('redfish_header',re1.headers) temp_header = re1.headers token= temp_header['X-Auth-Token'] print('redfish_token', token) else: pass def redfish_info(self,URL_suffix): #定义总获取函数,传参url的后半部分。如'/redfish/v1/Systems/1/Memory' urlset=self.URLprefix+URL_suffix if token !=0: header = { "Content-Type":"application/json", "X-Auth-Token":token } re1=requests.get(urlset,headers=header,verify=False) #print(re1.status_code) return (re1.json()) else: pass##restfull认证过程和获取参数class restfull_info(object): def __init__(self,ipaddr,username,password): self.ip=ipaddr.strip() self.username=username self.password=password self.URLprefix='http://' + ipaddr.strip() global CSRFToken ##同时存在4-5个token链接,每个token链接时间为5分钟,可以自己设置。 global cookie CSRFToken=0 cookie=0 tokenurl=self.URLprefix+'/api/session' headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Content-Length': '39', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': '' + self.ip + '', 'Origin': 'http://' + self.ip + '', 'Referer': 'http://' + self.ip + '/', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } print(tokenurl) data={ "username":self.username, "password":self.password } re1=requests.post(tokenurl,data=data,headers=headers,verify=False) print (re1.status_code) if re1.status_code == 200: #print (re1.json()) # print(re1.status_code) # print(re1.json()) # print('header:', re1.headers) # temp = re1.json() # print(temp['CSRFToken']) print(re1.headers) print (re1.json()) temp_header=re1.headers cookie=temp_header['Set-Cookie'] temp_token=re1.json() CSRFToken=temp_token['CSRFToken'] print ('restfull_cookie',cookie) print ('restfull_CSRFToken',CSRFToken) else: pass def restfull_info(self,URL_suffix): #定义总获取函数,传参url的后半部分。如'/redfish/v1/Systems/1/Memory' urlset=self.URLprefix + URL_suffix.strip() #print(urlset) # print ('token:',token) # print ('cookie:',cookie) if cookie != 0 and token != 0 : cook = cookie.split(";")[0].split("=")[1] print ('restfull_cook',cook) header = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Cookie': 'refresh_disable=1; QSESSIONID='+cook+'', 'Host': ''+self.ip+'', 'Referer': 'http://'+self.ip+'/', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', 'X-CSRFTOKEN': ''+CSRFToken+'', 'X-Requested-With': 'XMLHttpRequest' } re1=requests.get(urlset,headers=header,verify=False) print(re1.status_code) return (re1.json()) else: pass##合并restfull与redfish为一个类。class GetHostInfo(object): def __init__(self,ipaddr,username,password): self.ip=ipaddr.strip() self.URLprefix='https://'+ipaddr.strip() self.username=username.strip() self.password=password.strip() global redfish_token global restfull_CSRFToken global restfull_cookie restfull_CSRFToken=0 restfull_cookie=0 redfish_token=0 ##该token是加密的 ##以下是redfish的认证过程 redfishurl=self.URLprefix+'/redfish/v1/SessionService/Sessions' print(redfishurl) data={ "UserName":self.username, "Password":self.password } header={ "Content-Type":"application/json" } re1=requests.post(redfishurl,json.dumps(data),headers=header,verify=False) print(re1.status_code) if re1.status_code == 201: print('redfish_info', re1.json()) print('redfish_header', re1.headers) temp_header = re1.headers redfish_token = temp_header['X-Auth-Token'] print('redfish_token', redfish_token) else: pass ##以下是restfull的认证过程 restfullurl = self.URLprefix + '/api/session' restheaders = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Content-Length': '39', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': '' + self.ip + '', 'Origin': 'http://' + self.ip + '', 'Referer': 'http://' + self.ip + '/', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } print(restfullurl) data = { "username": self.username, "password": self.password } re1 = requests.post(restfullurl, data=data, headers=restheaders, verify=False) print(re1.status_code) if re1.status_code == 200: # print (re1.json()) # print(re1.status_code) # print(re1.json()) # print('header:', re1.headers) # temp = re1.json() # print(temp['CSRFToken']) print(re1.headers) print(re1.json()) temp_header = re1.headers restfull_cookie = temp_header['Set-Cookie'] temp_token = re1.json() restfull_CSRFToken = temp_token['CSRFToken'] print('restfull_cookie', restfull_cookie) print('restfull_CSRFToken', restfull_CSRFToken) else: pass def redfish_info(self,URL_suffix): #定义总获取函数,传参url的后半部分。如'/redfish/v1/Systems/1/Memory' urlset=self.URLprefix+URL_suffix if token !=0: header = { "Content-Type":"application/json", "X-Auth-Token":redfish_token } re1=requests.get(urlset,headers=header,verify=False) #print(re1.status_code) return (re1.json()) else: pass def restfull_info(self,URL_suffix): urlset=self.URLprefix+URL_suffix if token !=0: cook = restfull_cookie.split(";")[0].split("=")[1] print('cookie__restfull',restfull_cookie) print('cook__restfull',cook) print('CSRFToken__restfull',restfull_CSRFToken) header = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Cookie': 'refresh_disable=1; QSESSIONID='+cook+'', 'Host': ''+self.ip+'', 'Referer': 'https://'+self.ip+'/main.html', 'X-CSRFTOKEN': ''+restfull_CSRFToken+'', 'X-Requested-With': 'XMLHttpRequest' } re1=requests.get(urlset,headers=header,verify=False) print(re1.status_code) return re1.json() else: pass##redfish获取参数的测试##使用一个system总的URL分别获取到cpu、内存、存储三个url.所以只修改system的URL即可##sel日志单独使用URL获取def Collect_Iredfish_getinfonfo(ipaddr,username,password): H3CR4900=redfish_getinfo(ipaddr,username,password) ####total_system_URL收集/redfish/v1/Systems/1 select_system_total = '/redfish/v1/Systems/1' #print('cpu_total', hw2288HV5.Redfish_GetInfo(select_cpu_total)) temp_system_result1= H3CR4900.redfish_info(select_system_total) if isinstance(temp_system_result1,dict) and ('error' not in temp_system_result1.keys() ): ##处理cpu cpu = temp_system_result1['Processors']['@odata.id'] ##获取CPU的URL #print ('Processors',H3CR4900.Redfish_GetInfo(cpu)) cpu_result1 = H3CR4900.redfish_info(cpu) cpu_count = cpu_result1['Members@odata.count'] cpu_URLsuffix_list = [x['@odata.id'] for x in cpu_result1['Members']] print('CPU count:', cpu_count) for single_cpuurl in cpu_URLsuffix_list: singlecpu_result2= H3CR4900.redfish_info(single_cpuurl) if isinstance(singlecpu_result2, dict) and ('error' not in singlecpu_result2.keys()): #print ('singlecpu_result2',singlecpu_result2) print('CPU single name:', singlecpu_result2['Name']) print('CPU single ID:', singlecpu_result2['Id']) print('CPU single TotalCores(cpus):', singlecpu_result2['TotalCores']) print('CPU single Model(cpus):', singlecpu_result2['Model']) ###处理内存 memory = temp_system_result1['Memory']['@odata.id'] ##获取内存的URL memory_result1 = H3CR4900.redfish_info(memory) memory_count = memory_result1['Members@odata.count'] memory_URLsuffix_list = [x['@odata.id'] for x in memory_result1['Members']] print ('Memory count:',memory_count) for single_memoryurl in memory_URLsuffix_list: singlememory_result2 = H3CR4900.redfish_info(single_memoryurl) if isinstance(singlememory_result2, dict) and ('error' not in singlememory_result2.keys()): #print('singlecpu_result2', singlememory_result2) print('Memory name:', singlememory_result2['Name']) print('Memory ID:', singlememory_result2['Id']) print('Memory Size:', singlememory_result2['CapacityMiB']) print('Memory Type:', singlememory_result2['MemoryDeviceType']) ##处理存储 storage = temp_system_result1['Storage']['@odata.id'] ##获取存储URL #print ('storage',H3CR4900.Redfish_GetInfo(storage)) storage_result1 = H3CR4900.redfish_info(storage) storage_URLsuffix_list = [x['@odata.id'] for x in storage_result1['Members']] for single_storageurl in storage_URLsuffix_list: singlestorage_result2 = H3CR4900.redfish_info(single_storageurl) if isinstance(singlestorage_result2, dict) and ('error' not in singlestorage_result2.keys()): #print('singlecpu_result2', singlestorage_result2) disk_count=singlestorage_result2['Drives@odata.count'] print('disk count:',disk_count) print('storage name:',singlestorage_result2['Id']) if disk_count >0: ##有的URL中disk为0,不需要去获取值 single_disk_URLsuffix_list = [x['@odata.id'] for x in singlestorage_result2['Drives']] for disk_single in single_disk_URLsuffix_list: single_disk_result1 = H3CR4900.redfish_info(disk_single) if isinstance(single_disk_result1, dict) and ('error' not in single_disk_result1.keys()): #print ('single_disk_result1',single_disk_result1) print('disk name:', single_disk_result1['Name']) print('disk ID:', single_disk_result1['Id']) print('disk CapacityBytes:', single_disk_result1['CapacityBytes']) print('disk MediaType:', single_disk_result1['MediaType']) else: pass ##获取sel日志 需要四个url执行。 # logurlsuffix = '/redfish/v1/Managers/iDRAC.Embedded.1/Logs/Sel' ##日志sel # sellog=H3CR4900.Redfish_GetInfo(logurlsuffix) # if isinstance(sellog,dict) and ('error' not in sellog.keys() ): # print('SEL log:',sellog)if __name__ == '__main__': # Collect_Info('10.251.214.12', 'username', 'password') ##以下是redfish和restfull的分别测试 redfish_system ='/redfish/v1/Systems/1' restfull_cpuage='/api/system/cupsdata' restfull_info=restfull_info('10.251.214.12','username', 'password') redfish_info=redfish_getinfo('10.251.214.12','username', 'password') print ('restfull',restfull_info.restfull_info(restfull_cpuage)) print ('redfish',redfish_info.redfish_info(redfish_system)) ##以下是restful和redfish合并后 redfish_resfull=GetHostInfo('10.251.214.11','username', 'password') print('restfull', redfish_resfull.restfull_info(restfull_cpuage)) print('redfish', redfish_resfull.redfish_info(redfish_system))
以下单独对redfish模块进行测试。直接使用redfish模块。
**import redfish**login_host="https://10.251.214.11" ##h4clogin_account="usename"login_password="password"REDFISH_OBJ = redfish.redfish_client(base_url=login_host,username=login_account, password=login_password, default_prefix='/redfish/v1')REDFISH_OBJ.login(auth="session")response = REDFISH_OBJ.get("/redfish/v1/Systems/1", None)print(response)REDFISH_OBJ.logout()
测试
认证
过程
参数
三个
内存
函数
半部
日志
模块
处理
存储
两个
链接
服务器
服务
下有
同时
文章
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
铜陵服务器机柜多少钱
卫生局网络安全领导小组
商务软件开发证书
三年嵌入式软件开发什么水平
学校统计成绩用什么数据库
u8数据库下载
下列不属于网络安全策略的组成是
数据库2000怎么安装
怎么在服务器一直保持管理
复制数据库文件 2
郑州九州网络技术有限公司
国家网络安全周图册
软件开发厂怎么样
吉林网络时间同步服务器云主机
银行输入密码网络安全技术
计算机网络技术教育
战地五为什么服务器中断
网络安全防护体系和网络安全保障机制
网络安全概论 电子版
中心组网络安全
把网络安全阀抓在自己手中
商城商品管理后台怎么传服务器
国家网络安全宣传周知识问卷
无人车网络安全
政务服务软件开发员个人总结
数据库如何加入元组
12301数据库
全球10大互联网科技
郑州电商软件开发要多少钱
服务器搭建与平常维护