2016-09-19 4 views
0

私はackをicinga/nagiosサーバーに送信する機能を持っています。QNetworkAccesssManager icinga/nagios acknowledge

機能 - 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サーバー上でてmanualyそれをテストした場合、私はエラーを持っていますCSRF攻撃のようです!コマンドはClassic-UI経由で発行されませんでした。

私がマニュアルでnagiosテストサイトでテストしても、エラーはありません。設定サービスの確認はOKです。

私はこのソースをテストするとエラーが表示されます:申し訳ありませんが、指定されたコマンドをコミットする権限がありません。

どういうところが間違っていますか?あなたのすべてのアイデアをありがとう。最初は、Icingaの問題を解決する必要があります。これは代替テストとしてのみ使用されるNagiosテストページです。

答えて

0

ウェブサイトが認証を要求すると、QNetworkAccessManagerauthenticationRequired()信号を送信します。信号をスロットに接続し、スロットに引数として渡されたQAuthenticatorオブジェクトのユーザ名とパスワードを設定してみてください。

接続:

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

スロット:問題がHOSTで、大文字と小文字に敏感だった

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

関連する問題