QNetworkAccesssManager icinga / nagios 确认
QNetworkAccesssManager icinga / nagios acknowledge
我有一个向 icinga / nagios 服务器发送 ack 的功能。
函数 - 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 测试站点手动测试它,我没有错误。设置服务确认正常。
如果我测试这个来源,我有 error:Sorry,但您无权提交指定的命令。
怎么了?谢谢你的所有想法。起初我需要解决 Icinga 中的问题,nagios 测试页面我只用作替代测试。
当网站请求身份验证时 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");
}
该问题对 HOST 中的大小写字母敏感。
我有一个向 icinga / nagios 服务器发送 ack 的功能。
函数 - 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 测试站点手动测试它,我没有错误。设置服务确认正常。
如果我测试这个来源,我有 error:Sorry,但您无权提交指定的命令。
怎么了?谢谢你的所有想法。起初我需要解决 Icinga 中的问题,nagios 测试页面我只用作替代测试。
当网站请求身份验证时 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");
}
该问题对 HOST 中的大小写字母敏感。