H3C批量收集服务器信息,H3C设备服务器采集参数认证过程(包含redfish和restfull协议)...
该脚本针对H3C服务器分别对redfish和restfull两种协议的认证方式进行测试,并合并。
有三个类,分别是redfish协议测试、restfull协议测试、以及两个合并测试
文章最后使用redfish模块简单进行认证访问测试。
import requests
import json
requests.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" ##h3c
login_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()
H3C批量收集服务器信息,H3C设备服务器采集参数认证过程(包含redfish和restfull协议)...相关推荐
- 荒野行动一直在获取服务器信息,荒野行动取得服务器信息一直不动 服务器信息0处理办法...
软件安装:手机应用宝 <荒野行动>是由网易游戏研发的一款射击求生手游,该作于2017年10月28日正式公开测试. 荒野行动获取服务器信息一直不动怎么办呢?荒野行动今天给玩家带来了全新的更新 ...
- Android热修复之 - 收集崩溃信息上传服务器
1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...
- 怎么获取别人服务器信息失败,获取服务器信息失败
获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...
- 安卓手机怎么关闭服务器信息,安卓手机服务器信息怎么关闭
安卓手机服务器信息怎么关闭 内容精选 换一换 当云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.当您的云服务器无法远程登录时,我们建议您首先 ...
- 获取服务器信息失效,获取服务器时间失败
获取服务器时间失败 内容精选 换一换 安装完Mind Studio后,如果用户进行编译运行相关操作,则需要参见该章节,将硬件环境的lib库同步到Mind Studio安装服务器.已经完成安装.请确保D ...
- 正在检测服务器信息吗,云服务器会检测内容吗
云服务器会检测内容吗 内容精选 换一换 创建一台按需弹性云服务器.弹性云服务器创建完成后,如需开启自动恢复功能,可以调用配置云服务器自动恢复的接口,具体使用请参见管理云服务器自动恢复动作.该接口在云服 ...
- ios获取区域服务器信息,ios获取服务器数据
ios获取服务器数据 内容精选 换一换 调用API出错后,将不会返回结果数据.调用方可根据每个API对应的错误码来定位错误原因.当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码.返回的 ...
- 获取protal服务器信息超时,portal服务器
portal服务器 内容精选 换一换 配置云AP的SSID时支持的认证方式多达13种,但是常用且推荐使用的认证方式有:密码认证(PSK):设置无线终端接入无线网络时需要输入的密码.Portal认证:i ...
- kk 服务器信息,手机kk服务器设置
手机kk服务器设置 内容精选 换一换 已获取服务器管理员帐号与密码.打开CMD运行窗口,输入gpedit.msc,打开本地组策略编辑器.打开组策略在指定RD会话主机服务器的授权模式下拉列表中选择按用户 ...
最新文章
- 【转摘】Word中查找与替换的妙用
- GDCM:gdcm::PersonName的测试程序
- Python安装某个库,出现Read_Time_out错误,那么如何配置 “国内镜像源”呢?
- java 数组的冒泡排序
- gentoo使用unicon支持中文
- Angular 2与TypeScript概览
- jeecms 代码生成 Tools
- Windows上更换鼠标指针图标
- 爬虫应对银行安全控件-实践
- 树莓派红外避障小车python_制作树莓派wifi遥控和自动避障小车
- Chrome DevTools 中键盘快捷键的参考。
- 首期工业科技生态创新论坛举办,上海控安与微软苏州人工智能产业创新中心签署战略合作协议
- java 数字拆分_如何在java中分割数字?
- SLF4J: Class path contains multiple SLF4J bindings(log4j与logback冲突了)
- Eclipse汉化版本和导入src
- ClickHouse MergeTree副本表和分布式表(切片)
- jdk1.7安装详细过程
- 《出路》电影版看到父母倾尽所有供寒门学子找出路还是那么的艰难
- Android 11.0 无源码apk授予QUERY_ALL_PACKAGES权限
- Day 09 - Amazon Linux 2 上解决跨来源资源共用 (CORS) 与开机自动启动 uwsgi
热门文章
- python 通信模块_python 多进程通信模块
- 计算机二级公共基础知识2020版电子版,2020年计算机二级考试公共基础知识背诵笔记...
- php基础 简书,PHP入门基础
- python3 rid1.7.4.2 控制台中文乱码_TL;DR - 有关 Python 2 和 Sublime Text 中文 Unicode 编码问题的分析与理解...
- 中小学生学python_《中小学生Python编程入门指南》 附录一
- C++头文件的防卫式声明(为了防止多次include)
- 从attention到Transformer+CV中的self-attention
- Java加密与解密的艺术~DES实现
- Java并发编程实战~Lock
- JMM设计原理之双重检查Lock