2016-09-19 66 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