笔者是某理工大学的学生,我们学校的校园网是无密码登陆,但是需要网络认证,以下贴出我的登陆方法,可能只适用一部分人,仅供参考。
因为我比较穷,没钱给树莓派配屏幕,只好想办法再命令行界面下进行登录认证,其实所谓的登录认证,也就是在本地向服务器POST一段数据,这段数据包含着你的登陆账户和密码。什么是POST呢,这是HTTP协议中的一个方法,具体详见 维基百科-超文本传输协议 。我们首先来看它会向服务器POST什么数据,我使用 Fiddler 进行数据的抓包,使用简易教程见 Fiddler抓包简易教程 。你也可以使用浏览器的F12功能进行调试,只不过没有Fiddler方便。
我们可以看到发起了这么多的请求,其实只有一个是登陆时的POST请求,其他的是登陆成功后对其他资源的请求。我们可以看见第三条中的URL里面有一个success字样,这是登陆成功后返回的jsp页面。我们查看它的上一条请求在右侧窗口中可以看到请求的样式,我们不看Fiddler对请求和响应的格式分析结果,只看它们的原始字符串,单击Raw可以看到如下界面。
其中右上方的的字符串是POST请求的全部内容,右下方是登陆成功后的响应。我为什么不一个一个分析它的请求头响应头什么的?因为我接下来不会用HTTP协议向服务器发送请求,而是用TCP/IP协议发送请求。TCP/IP协议详见 维基百科-TCP/IP。 因为该请求是HTTP请求,所以服务器端口是80 。而服务器网址为 auth.dlut.edu.cn ,所以很容易发起一个TCP请求,然后获取它的响应。我们将Filder上面的请求字符串全部复制下来,然后通过TCP协议发送给服务器,然后等待响应字符串,简单粗暴。代码如下:
获得的相应如下:
可见已经成功了。
切到源代码文件目录,打开cmd,输入如下代码:
javac -encoding utf8 -d . .\Main.java
该目录中会产生一个名为http的目录,将该目录移动到树莓派中去,目录里面是编译好的class字节码。 树莓派的raspbian系统自带jdk,所以直接运行如下代码即可.
java http.Main
但是在这之前需要在树莓派的配置文件中添加相应的wifi。如下代码:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
在其中添加:
network={
ssid="wifi名称"
key_mgmt=NONE
}
重启树莓派,或者:
sudo iwconfig wlan0 essid wifi名称
即可连接校园网的wifi,然后执行之前的指令即可登陆成功。
代码地址:github:crazyStrome