【问题标题】:QNetworkAccesssManager icinga / nagios acknowledgeQNetworkAccesssManager icinga / nagios 确认
【发布时间】:2016-09-19 21:47:34
【问题描述】:

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

功能 - 发送确认

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 测试页面。

【问题讨论】:

    标签: qt cgi nagios icinga


    【解决方案1】:

    当网站请求身份验证时,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");
    }
    

    【讨论】:

    • 这是我的第一个代码版本 :-)。我认为问题存在所以我将其更改为在 QUrl 中验证。
    • 呃,这太可怕了。所有问题都只是因为主机名区分大小写:-(。我将所有主机转移到 BIG,然后在发送 ACK 时...... grrrrrrrr。2天2夜。
    • 天哪!我会告诉您,我已经测试了您提供的代码并且运行良好。我曾想象问题发生在一些你没有注意到的小细节上。我正要问你设置主机和服务的代码部分。哈哈哈。我很高兴您已经解决了这个问题,尽管它花费了一些时间。
    • 非常感谢您的关注和努力。服务器有非常愚蠢的答案。 :-)。为什么不报告 - 主机名错误、主机不存在或类似情况?
    【解决方案2】:

    该问题对 HOST 中的大小写字母很敏感。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多