校园网WiFi】Atom板连接web认证的公开wifi
本帖最后由 zhang209a 于 2016-5-18 23:07 编辑转载自 http://bbs.intorobot.com/thread-695-1-1.html
本文目的: 让Atom可以自动连接需要web认证的wifi,通过认证,使得Atom板具有上网权限
为什么 :在企业或者学校都是WPA2 Enterprise网络(方便管理), 但是Atom使用的MT7620N的wifi驱动不支持WPA2 Enterprise网络(也就是普通需要用户名和密码的网络,WPA2 Personal网络即使普通的连接只需要输入密码的网络), 所以Atom不能靠正常配置连接网络.不过为了支持各种各样的设备(不支持加密的设备), 学校或者企业都会提供公开wifi(连接不需要密码)然后加web网页认证的模式,本文即使利用这种wifi权限认证方式来"曲线救国"--让Atom可以连接网络.
需要 : Atom板, 电脑, wifi的账户与密码, web认证的公开wifi, web开发相关知识
步骤 :
1.配置Atom连接公开wifi
1.1 上电Atom板,电脑连入Atom的wifi
默认为: IntorobotXXXX (XXXX为MAC后四位,Atom板上的贴纸可以查看)
1.2 电脑通过命令行连接Atom板
第一次使用, telnet 192.168.8.1 不需要输入密码,建议使用passwd root 命令设置root密码(一旦设置root密码,以后telnet不能再连接,必须使用ssh连接). 已经设置过root密码的请直接
ssh root@192.168.8.1 连接,输入你的 root密码.
1.3 修改wireless配置文件
root@Atom:~# vi /etc/config/wireless
本文全部以CityU的公开wifi CityUGuest为例演示.
下面为已经配置好的文件:
config wifi-device 'ra0'
option type 'ralink'
option mode '9'
option txpower '100'
option ht '20+40'
option country 'US'
option disabled '0'
option channel 'auto'
config wifi-iface
option device 'ra0'
option network 'lan'
option mode 'ap'
option ssid 'IntoRobot-Atom0A62'
option encryption 'psk2'
option key 'intorobot'
option ApCliEnable '1'
option ApCliEncrypType 'NONE'
option ApCliSsid 'CityUGuest'
option ApCliAuthMode 'NONE'
option ApCliPassWord ''
在此解释部分和说明需要修改的. 第一部分config wifi-device 'ra0' 不需要修改,修改 config wifi-iface部分即可,下文 #后为注释.
config wifi-iface
option device 'ra0'
option network 'lan'
option mode 'ap' #openwrt的工作模式(软ap),跟多了解google
option ssid 'IntoRobot-Atom0A62' #Atom对外的wifi名字(SSID),可以修改自己喜欢的
option encryption 'psk2' #Atom对外的wifi的加密方式,选择最常用的最好
option key 'intorobot' #Atom对外wifi的密码(明文)
option ApCliEnable '1'
option ApCliEncrypType 'NONE'
option ApCliSsid 'CityUGuest' #!!!需要连接的公开wifi名(SSID)!!! 这个根据自己的环境的公开wifi选择设置,必须修改
option ApCliAuthMode 'NONE' #公开wifi没有密码 选择NONE
option ApCliPassWord '' #没有密码
Tip: 编辑完后,按Esc键,然后输入 :wq保存退出(简单的vim操作). 然后重启wifi
root@Atom:~# /etc/init.d/network restart
重启wifi会断开你电脑wifi和atom之间的连接,不用担心,稍后重新连接,然后
root@Atom:~# ifconfig
查看apcli0(如果你们修改名字),看是否获取ipv4的地址,一般为ipv4.
apcli0 Link encap:EthernetHWaddr 1AundefinedD:AA:00:0A:62
inet addr:xx.xx.xx.xx
至此你的Atom板已经连接到了公开wifi,但是你的电脑和Atom并不能访问网络(还没有权限).
2.发送POST登陆信息
这一步主要是想网络认证服务器发送认证信息获得上网权限.
公开wifi的web验证一般都至少两个信息(字段) username和password
上图中点击一个对话框,右键Inspect (使用Chrome浏览器)或者直接F12开发者模式下区Element,目的是查看这两个要发送信息的字段名字,如下图
a.找到 <form action="login" id="regform" method="post" autocomplete="off" title="Form used by registered users to login">
这是说明一个表单,注意method字段就好,大多是post,但是也可能为get,两种方式的数据传输是不一样的,需要不同的构造方式,本文以post为例,如果有遇到get情况可以融会贯通或者论坛求助.
b.上面图片其中蓝色的是输入信息的input(需要一点html的知识),
< input id="password" name="password" type="password" size="25" class="text" accesskey="p">
就是上面这样的,主要找到name的值,这是网页提交时候里面密码对应的字段,需要记下,同样要获得username的对应字段.
c.找到表单提交的网站(真的需要html知识),比如上图为https://securelogin.arubanetworks.com/cgi-bin/login 这个提交的网站和<form action="login" id="regform" method="post" autocomplete="off" title="Form used by registered users to login">里面的action字段有关系,说明提交到哪儿去. 但是并不能直接使用这个网址,因为还没有联网的权限没有dns服务器来给我们解析网址.可以ping或者其他的方式获得网址对应的ip (此处针对特殊情况提示,可能有的端口不是默认80,这种情况也需要了解端口号)
OK,至此我们需要了解abc三方面的信息.然后简单利用linux的curl命令来模拟我们的web登陆动作,实质就是把需要的数据发送过去.
以post为例子,命令
root@Atom:~# curl -k -d "user=yourusername&password=yourpassword" 172.24.12.239/cgi-bin/login
解释:
curl 是一个程序
-k表示不接收加密(注意到web使用了https,正常需要openssh等加密解密,Atom安装openssh什么太麻烦且没有必要)
-d 表示data,也就是用post发送时候数据单独的,-d的后面data,字段间用&连接.
"user=yourusername&password=yourpassword"为我们需要发送的数据,user即使我们在b里面获取的name的字段名字,password是密码的字段名字,=后面为你自己的信息,每一个都必须正确
172.24.12.239/cgi-bin/login为我们信息提交的地址,在c步骤获取的,如果端口号不是80需要在ip后面加上:xxx,例如172.24.12.239:8080/cgi-bin/login
该命令发送完后,如果正常我们会收到认证成功后返回的信息(一般是一个网页,比如说认证成功3秒跳转xx之类),不用理会. 可以尝试连接网络测试.
3.绑定intorobot云平台账号
参考http://docs.intorobot.com/zh/con ... nectedToTheInternet
在网络连接成功后,如果第一次使用,可以使用luci网页去绑定自己的intorobot账号,但是请不要修改
如上图,请只在右边填写信息配置,左边不要修改.
4.配置自动开机连接网络
到步骤3,已经连接好了网络也绑定账号,可以正常使用,但是还有一点问题: 每次断电后上电都需要ssh进去手动输入root@Atom:~# curl -k -d "user=yourusername&password=yourpassword" 172.24.12.239/cgi-bin/login 这样很麻烦,所以在此我们设置为开机启动脚本,使得开机自动运行.
a.创建文件connect_wifi (以root身份)
root@Atom:~# vi /etc/init.d/connect_wifi
b.然后输入
#/bin/sh /etc/rc.common
# send user and password to auth server via post
START = 49
start()
{
curl -k -d "user=yourusername&password=yourpassword" 172.24.12.239/cgi-bin/login
}
然后保存退出
c.修改权限,增加执行权限
root@Atom:~# chmod a+x /etc/init.d/connect_wifi
d.添加软连接,命令
root@Atom:~# ln -s /etc/init.d/connect_wifi /etc/rc.d/S49connect_wifi
然后reboot既可以测试
NOTE:
1.注意b里面的数字代表执行的顺序,越大越后面执行,具体和intorobot工作人员可以讨论
2.软链接的文件名是有要求的,google
5.监控wifi
在学校和企业使用Atom是很方便的,因为这些地方wifi会覆盖很大的区域,同一个wifiSSID各个地方都有,对于移动机器人什么比较有利.
可能还不是很完善的是,网络中断需要再次认证连接什么的,这部分在本文提出来,但是不会给出具体的解决方法,只有大致思路.
主要就是监视网络然后失败了就重试.
1. linux crontab开启周期任务区监视网络,失败了就重新连接wifi 认证之类
2.网络监视交给Atom来做,给外部留callback或者中断
遗留问题:
由于对openwrt不是很熟悉,还有问题没有解决.
在开机自动发送认证信息前,应该先调用wifi连接并且确认连接上了才有可能发送认证信息,这部分需要完善
更多实例教程请查看IntoRobot BBS http://bbs.intorobot.com/。可加入QQ群(460095989)与众多创客进行交流。
页:
[1]