首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HP MSA 2312 XML API“未经授权访问请求”

HP MSA 2312 XML API“未经授权访问请求”
EN

Server Fault用户
提问于 2014-08-29 14:56:25
回答 1查看 877关注 0票数 3

我正在尝试编写一个定制的Nagios插件,通过HTTP监视HP MSA2312fc。我可以通过/api/login/{login_hash}成功登录系统,但在尝试获取某些数据(即via /api/show/ system )时,总是会出现“未经授权访问请求”的错误。我在不同的MSA上尝试过这些命令,但总是相同的错误。

代码语言:javascript
复制
# Successful login
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE>
<OBJECT basetype="status" name="status" oid="1">
    <PROPERTY name="response-type">success</PROPERTY>
    <PROPERTY name="response-type-numeric">0</PROPERTY>
    <PROPERTY name="response">deb9b907d11459757af645bd859e01aa</PROPERTY>
    <PROPERTY name="return-code">1</PROPERTY>
</OBJECT>
</RESPONSE>

# Error
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE>
<OBJECT basetype="status" name="status" oid="1">
    <PROPERTY name="response-type">error</PROPERTY>
    <PROPERTY name="response-type-numeric">1</PROPERTY>
    <PROPERTY name="response">Unauthorized access requested</PROPERTY>
    <PROPERTY name="return-code">6</PROPERTY>
</OBJECT>
</RESPONSE>

我已经可以通过P2000 API成功地监控HP P2000 G3,而不会出现任何问题。

我使用Python 2作为插件。附件是用于从MSA P2000 G3登录和读取数据的相关代码:

代码语言:javascript
复制
import hashlib
import urllib2
from xml.etree import ElementTree

# Log into MSA
def msa_login(hostname, username, password):
    def create_login_hash(username, password):
        login_string = "{0}_{1}".format(username, password)
        return hashlib.md5(login_string).hexdigest()

    login_hash = create_login_hash(username, password)
    url_login = "http://{0}/api/login/{1}".format(hostname, login_hash)
    req_login = urllib2.Request(url_login)
    response_login = urllib2.urlopen(req_login)
    #print(response_login.read())
    login = ElementTree.parse(response_login).getroot()

    # Get sessionid
    for property in login.findall('./OBJECT/PROPERTY'):
        if property.attrib['name'] == 'response-type' and property.text != 'success':
            print("CRITICAL - Couldn't login to MSA")
            exit(NAGIOS_CRITICAL)

        if property.attrib['name'] == 'response':
            return property.text


# Read system data
def parse_system(hostname, sessionid):
    url_system = "http://{0}/api/show/system".format(hostname)
    req_system = urllib2.Request(url_system)
    req_system.add_header('sessionKey', sessionid)
    response_system = urllib2.urlopen(req_system)
    system = ElementTree.parse(response_system).getroot()
    [...] # parsing data

有人能给我一个提示为什么我总是收到未经授权的消息吗?或者有一个工作代码片段?我知道Telnet有XML模式,但出于各种原因,我不愿使用它。

EN

回答 1

Server Fault用户

发布于 2015-02-01 16:49:22

你需要发送Cookie的标题:

代码语言:javascript
复制
Key Value
Cookie  wbisessionkey=ee7426964a6d14788ba86f77764733bf; wbiusername=monitoruser

类似这样的代码(未经测试的代码):

代码语言:javascript
复制
cookie = "wbiusername={0}; wbisessionkey={1}".format(username,sessionid);
req_system.add_header('Cookie', cookie);
票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/625002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档