Wireshark抓包分析校园网登录过程

使用Wireshark抓包分析校园网登录过程,并使用curl实现模拟登录。

1、登录过程抓包

1.1 TCP三次握手建立连接

下图是经典的TCP三次握手示意图。

下面是抓到的和校园网登录界面1.1.1.2建立TCP链接的三个数据报文。

1.1.1 第一次握手

客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

从下图可以看到此时

seq=x=0

客户端发送一个TCP,标志位为SYN,序列号为0,代表客户端请求建立连接,如下图:

1.1.2 第二次握手

服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

从下图可以看到此时

ack=x+1=0+1=1

seq=y=0

1.1.3 第三次握手

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

从下图可以看到此时

ack=y+1=0+1=1

1.2 登录过程分析

我们查看登录的报文,可以看到是一个HTTP POST请求,目标URL为http://a.stu.edu.cn/ac_portal/login.php

在后面的报文分析中我们可以发现不仅是登录,查询和注销的目标URL也是http://a.stu.edu.cn/ac_portal/login.php,不同之处是opr选项的不同。

再来查看报文内容,我们发现登录的选项较多

  • opr为登录选项,此处为pwdLogin,即账号密码登录
  • userName为用户名
  • pwd为用户密码
  • ipv4or6实则为你的Temporary IPv6 Address,如果无则为空
  • rememberPwd为是否记住密码

1.3 查询过程分析

查询登录状态的报文也非常简单,使用HTTP POST提交一个opr=online_check的请求。

然后服务端会返回一条html的text消息,里面的主要内容是两个选项onlineusername

其中online有0和1两个状态,当online为1的时候,表示已经登录成功,且会返回用户名username;当online为0的时候,表示没有登录,不会返回用户名username

1.4 注销过程分析

1.4.1 IPv4注销过程

IPv4的注销过程非常简单,只需要提交一个带有opr=logot的HTTP POST请求即可。

1.4.2 IPv6注销过程

在本机获得IPv6地址之后,注销的HTTP POST请求中还需要多加一项ipv4or6=你的Temporary IPv6 Address,才能成功注销。

2、Curl模拟登录

2.1 Curl简介

Curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称Curl为下载工具。Curl还包含了用于程序开发的libcurl。

Curl支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

Curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

我们可以输入curl --help来查看相关的指令帮助。

下面我们要用到的模拟登录主要是使用curl模拟表单登录。

2.2 登录过程分析

从上面的报文分析我们得知,登录的时候http post请求提交了多个选项,但实际上需要登录成功只需要提交登录选项(opr)、账号(userName)和密码(pwd)即可。

1
curl -d "opr=pwdLogin&userName=你的账号&pwd=你的密码" http://a.stu.edu.cn/ac_portal/login.php

2.3 查询过程分析

1
curl -d "opr=online_check" http://a.stu.edu.cn/ac_portal/login.php

2.4 注销过程分析

在无IPv6地址的情况下,我们注销登录只需要提交一个注销请求(opr=logout)即可。

1
2
# 因为返回的数据中有中文,可能会产生乱码,所以要使用iconv进行编码转换
curl -d "opr=logout" http://a.stu.edu.cn/ac_portal/login.php | iconv -f utf-8 -t gb2312

在有IPv6地址的情况下,我们从上面的报文分析可知,除了注销请求之外,我们还需要提交一个IPv6地址(``Temporary IPv6 Address`),才能够顺利注销。

1
2
# 因为返回的数据中有中文,可能会产生乱码,所以要使用iconv进行编码转换
curl -d "opr=logout&ipv4or6=你的Temporary IPv6 Address" http://a.stu.edu.cn/ac_portal/login.php | iconv -f utf-8 -t gb2312

3、实现定时登录和爆流量换账号

首先要说明一下现在的网络状况,在宿舍里面,断网时间是从晚上12点到早上6:30,且每个账号每天有限制使用流量,而在早上6:30之后,如果宿舍接入路由器需要手动登录,这里我们可以通过定时任务来实现自动登录和一个账号流量用完之后切换到另一个账号。

3.1 定时登录

1
curl -d "opr=pwdLogin&userName=你的账号&pwd=你的密码" http://a.stu.edu.cn/ac_portal/login.php

在linux中(树莓派或NAS)设置定时任务,6:32分执行该任务。

3.2 爆流量换账号

由于通过校园网登录界面查询是否爆流量会有延迟(大概5分钟),所以我们需要使用ping命令来实时检测。

1
ping baidu.com || curl -d "opr=logout" http://a.stu.edu.cn/ac_portal/login.php && curl -d "opr=pwdLogin&userName=你的账号&pwd=你的密码" http://a.stu.edu.cn/ac_portal/login.php

使用linux中的crontab工具,设置该任务执行时间为每分钟执行一次,执行时间为7:00到23:59。