QNetworkAccesssManager icinga / nagios承认

时间:2016-09-19 21:47:35

标签: qt cgi nagios icinga

我有一个将ack发送到icinga / nagios服务器的功能。

功能 - sendAcknowledge

void MNetworkConnector::sendAcknowledge(QString service, QString host)
{

    QNetworkAccessManager *ackmanager;
    ackmanager = new QNetworkAccessManager();

    QString ackcommand = "http://nagioscore.demos.nagios.com/nagios/cgi-bin/cmd.cgi?cmd_typ=34&cmd_mod=2&host=#host#&service=#service#&com_author=nagiosadmin&com_data=Sent:+mMonitor&btnSubmit=Commit";
    service = service.replace(" ", "+");
    ackcommand = ackcommand.replace("#host#", host).replace("#service#", service);
    connect(ackmanager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished2(QNetworkReply*)));

    QNetworkRequest myReq;
    QUrl myUrl(ackcommand);
    myUrl.setUserName("nagiosadmin");
    myUrl.setPassword("nagiosadmin");
    myReq.setUrl(myUrl);
    myReq.setRawHeader("Referer", "http://nagioscore.demos.nagios.com/nagios/cgi-bin/cmd.cgi");
    ackmanager->get(myReq);
}

功能 - replyFinished2

void MNetworkConnector::replyFinished2(QNetworkReply *r)
{
    qDebug() << "reply output:" << r->readAll();
}

系统返回了几个错误。 如果我在我的企业icinga服务器上测试此源,我有错误: 并非所有命令都可以成功发送 - 未授权

如果我在我的企业icinga服务器上手动测试它,我有错误:错误:这似乎是CSRF攻击!该命令不是通过Classic-UI本身发布的!

如果我在nagios测试网站上手动测试,我没有错误。设置服务确认是好的。

如果我测试此源我有错误:抱歉,但您无权提交指定的命令。

出了什么问题?谢谢你的所有想法。起初我需要在Icinga中解决问题,我只使用nagios测试页作为替代测试。

2 个答案:

答案 0 :(得分:0)

当网站请求身份验证QNetworkAccessManager时,会发出authenticationRequired()信号。尝试使用插槽连接信号,然后在作为参数传递给插槽的QAuthenticator对象上设置用户名和密码。

连接:

connect(ackmanager, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)), this, SLOT(authenticationRequired(QNetworkReply *, QAuthenticator *)));

插槽:

void MNetworkConnector::authenticationRequired(QNetworkReply *r, QAuthenticator *authenticator)
{
    authenticator->setUser("nagiosadmin");
    authenticator->setPassword("nagiosadmin");
}

答案 1 :(得分:0)

问题对主机中的大写和小写字母很敏感。