设为首页 收藏本站
查看: 1409|回复: 0

[经验分享] WiFi QC 自动测试:Qt控制无线路由器

[复制链接]

尚未签到

发表于 2015-10-1 14:12:05 | 显示全部楼层 |阅读模式
  


  在测试wifi的时候,测试人员一般要使用很多不同型号的AP,并且需要不断地切换Chariot的配置。
  这里的思路是致力于提供一个友好的GUI界面来自动控制AP,并且自动控制Chariot进行Throughput的测试。
  这里Chariot的部分就不提了,可以自行参照Chariot的c API或者tcl的API进行程序设计。
  


  这里先给出一个实例,那就是Tplink的AP,待完善之后可以将每一个AP做成一个配置文件,方便扩展。
  


  先祭出Qt代码吧:
  

#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);

manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)), this,SLOT(replyFinished(QNetworkReply*)));
}
Dialog::~Dialog()
{
delete ui;
}

void Dialog::replyFinished(QNetworkReply *reply)  //当回复结束后
{
QByteArray  reply_str;
switch (reply->error()) {
case QNetworkReply::AuthenticationRequiredError:
qDebug()<<&quot;AUTH REQUIRED&quot;;
qDebug()<< reply->rawHeaderList();
qDebug()<< reply->rawHeaderPairs();
/* no break */
case QNetworkReply::NoError:
reply_str = reply->readAll();
ui->text->setPlainText(QString::fromUtf8(reply_str));
reply->deleteLater();
break;
default:
qDebug()<<&quot;ERROR WHEN REPLY:&quot; << reply->error();
}
}

void Dialog::on_init_clicked()
{
manager->get(QNetworkRequest(QUrl(&quot;http://192.168.2.1&quot;)));
}

/*
Authorization: Basic YWRtaW46YWRtaW4=
Accept: text/html
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
*/
void Dialog::on_start_clicked()
{
QString get_str = &quot;http://192.168.2.1/userRpm/WlanNetworkRpm.htm?ssid1=haha&wlMode=2&channel=3&mode=5 \
&chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid= \
&keytype=1&wepindex=1&authtype=1&keytext=&Save=%B1%A3+%B4%E6 HTTP/1.1&quot;;
QUrl url(get_str);
QNetworkRequest req;
req.setUrl(url);
req.setRawHeader(&quot;Authorization&quot;, &quot;Basic YWRtaW46YWRtaW4=&quot;);
manager->get(req);
}



  
  这里在界面上放置了一个PlaintextEdit和两个按钮,上述的两个函数分别对应每一个按钮的点击事件。
  


  Qt提供了访问HTTP很简单的方式,使用它的API能够轻松地实现HTTP数据的交互。
  可以看到一开始初始化了一个QNetworkAccessManager,当数据到达客户端的时候replyFinished函数就会被呼叫。
  在这个函数里面,我判断了三种情况,其中比较特殊的就是AuthenticationRequiredError的事件。
  当打开Tplink路由器的时候,路由器就会弹出一个需要认证的界面从而触发这个事件。实际上从HTTP交互的header可以看出来。
  


  TPLINK740N使用的是HTTP摘要认证,可以看看此博客了解详情:
  点击打开链接


  


  当点击按钮触发on_init_clicked的时候,就会最终触发AuthenticationRequiredError的事件,因为
  没有给AP提供密码。接下来的每次交互中都需要给AP提供密码来保证访问的成功:
  


  

    req.setRawHeader(&quot;Authorization&quot;, &quot;Basic YWRtaW46YWRtaW4=&quot;);


其中YWRtaW46YWRtaW4=是从admin:admin产生的,欲知详情可以打开上面提供的链接。
  
   DSC0000.jpg


  实际上,HTTP头部有很多字段,这里只使用了最重要的一个,其他的Qt会自动帮我们加的(好方便!)
  


  


  当点击按钮触发on_start_clicked的时候,就可以成功设置AP了,上面设置的效果如下:
  


  


DSC0001.jpg


  


  聪明的你很容易修改这个字符串来达到你想要的效果:
  

    QString get_str = &quot;http://192.168.2.1/userRpm/WlanNetworkRpm.htm?ssid1=haha&wlMode=2&channel=3&mode=5 \
&chanWidth=2&ap=1&broadcast=2&brlssid=&brlbssid= \
&keytype=1&wepindex=1&authtype=1&keytext=&Save=%B1%A3+%B4%E6 HTTP/1.1&quot;;


最终可以给每一个AP提供一个配置文件,因为上层可以做到一致(SSID、channel等设置),所以很容易实现自动化  
  


  另外,从AuthenticationRequiredError给出的信息里面(rawHeaderPairs)可以判断AP的型号
  


  


  


  


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121407-1-1.html 上篇帖子: ANT编译打包&WIFI调试& adb shell常用命令 下篇帖子: win7 wifi热点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表