2016-09-19 61 views
0

我有一个功能,发送到icinga/nagios服务器。QNetworkAccesssManager 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服务器上的根源,我有错误: 并非所有命令都可以送过成功 - 未授权

如果我manualy测试我公司icinga服务器上,我有错误:错误:似乎是一个CSRF攻击!该命令不是通过Classic-UI本身发布的!

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

如果我测试这个源,我有错误:对不起,但你没有授权提交指定的命令。

怎么了?感谢您的所有想法。起初,我需要在Icinga中解决问题,我只用作替代测试的nagios测试页面。

回答

0

问题是要在HOST大写和小写字母敏感。

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"); 
} 
+0

这是我的第一个版本的代码:-)。我认为这个问题在那里,所以我改变了它在QUrl中验证。 – exo

+0

呃这太可怕了。所有的问题只是因为主机名是区分大小写的:-(。我把所有的主机转移到BIG,然后当发送ACK ..... grrrrrrrr。2天和2个月。 – exo

+0

哦,男人!我会告诉你,我测试了你提供的代码并且工作正常,我曾想象过这个问题发生在你没有注意到的一些细节上,我正要问你设置主机和服务的代码部分,哈哈哈,我是很高兴你已经解决了问题,尽管花了很多时间。 – felipeptcho