问题描述:
在宿舍使用无线路由器的情况下,使用Android官方登陆校园网时,每个人必须登陆自己的账号才能上网,而使用非官方版的客户端时,只需要其中一个人登陆即可,其他人连接无线路由器即可上网。
原理:
我先从客户端的角度解释这个问题,官方版与非官方版客户端的区别在于官方版多了一个ip地址检测模块。该模块当检测到你手机的ip是以192开头的话,就判断你使用了无线路由,这时候客户端是不会让你上网的,然而学校内网分配的ip地址是以10开头的。
这是学校自动分配的内网ip:
所以,我们知道,学校是通过在客户端进行验证的,在服务器端并没有验证。
下面我从计算机网络的角度来解释一下,客户端联网的过程发生了什么。
如上图所示:数据包(宿舍)—->路由器(宿舍)—->…….—->学校总网关
总网关拿到数据包后,提取出包头的用户名和密码,并与后台数据库匹配,如果匹配,则数据包可以经过网关到达Internet并给客户端返回登陆成功的信息(这时宿舍路由器与总网关是联通的,所以连接路由器的手机可以直接上网),否则丢弃数据包并返回登陆失败的信息。
在我抓取官方客户端数据的时候,发现这个过程在是用HTTP协议实现的,并且用户名和密码是明文传输的
只要关闭路由器的DHCP功能,共享上网就无法实现了,因为此时的路由器相当于一个交换机了