1.抓包分析登录过程
这里尝试过两种方法:一是直接用新版edge的DevTools,即按F12键;另一种则是使用Wireshark软件。下面分别演示这两种方法。
方法一:使用DevTools
首先打开校园网的登录页面
接着按F12进入DevTools,选择NetWork的选项卡,默认开始记录网络活动
然后返回登录页面,输入账号密码点击登录
此时去到DevTool的窗口,查看抓取的结果。抓取结果默认是按照时间顺序排列的,如果不是可以使用WaterFall的选项卡进行升序或者降序的排列
在抓取的网络活动当中,发现有名为login.php的活动,猜测其为登录的关键步骤。上图是其中的某一个login.php的活动,其向目标网址发送了一个post请求,且携带的参数当中包含账号和密码。此活动应该是登录的关键步骤。
方法二:使用WireShark
同样打开校园网的登录页面
启动WireShark,选择网络接口进行抓取。一般来说,抓取的网络接口都是直接对外的总连接的接口,即波动较大的网络。如果不清楚选择哪一个,也可以打开网络中心看一看对外连接的是哪一个网络接口。
然后返回登录页面,输入账号密码点击登录
由于已知登录界面的主机的ip,所以在这里就直接输入了ip和协议进行过滤。如果不清楚,还是需要去F12的界面查看。关于过滤规则详见1
2.构造数据包模拟登录
从F12和WireShark的抓取结果来看,登录过程主要是本地主机向登录页面发送了一个POST的请求,并携带账号密码进行验证。构造数据包的方法也有两个,一个是curl命令行构造,一个是python脚本构造
方法一:使用curl命令
原本是参照某篇博文2进行构造命令,然后发现Windows下Powshell的命令格式有所不同,并不能使用这篇博文的方式。后续根据报错查找,另一篇博文3展示了改进方法。关于Powshell下curl命令的使用方法,这里有两篇博文也有很好地说明。45也可以参照该博文6使用curl进行登录。
方法二:使用python脚本
python代码如下:
import requests
login_url = ""
data = {
"opr":"",
"userName":"",
"pwd":"",
"ipv4or6":"",
"rememberPwd":""
}
doc = requests.post(login_url,data).text
print(doc)
以上代码参考了该博文7
3.总结
在抓包过程当中,DevTools的目标更明确,指定对某一个具体的页面的网络活动进行抓取,可以看到该页面的ip地址、端口等等;相比之下Wireshark的目标更宽泛,所有通过网络接口的数据均进行抓取,需要过滤才能看到目标页面的信息。不仅目标宽泛,WireShark抓取的数据也更多,过滤后,目标页面的TCP三次握手的过程也能够看到。
此次抓取的是登录过程,后续也抓取过退出过程,方法基本一致。退出过程的目标地址和登录过程的目标地址一样,只是携带的参数不同。
除此之外,也尝试过模拟登录搜狐邮箱,同样参考这篇博文7,但并没有成功。分析是携带的参数不对,除了时间戳这个变量之外,每次登录的参数还受其他变量的影响。而且其使用的是加密的https的方式,还需要对WireShark进行配置才能解密数据包8。
还尝试过抓取B站的弹幕,参考的这两篇博文910,但都没有成功。原因是并没有找到储存弹幕的xml文件,也就没有找到弹幕的服务器地址和获取弹幕的请求参数。不过有大佬做了API11,可以直接使用API获取弹幕。除了用API之外,其实也可以用BeautifulSoup等python库,因为我发现弹幕是可以直接在网页的HTML文件里面找到的。直接爬取HTML文件,根据规则过滤,拿到弹幕也是可以的。但是在F12的界面,初始的HTML文件是没有弹幕的。猜测是有脚本从服务器获取了弹幕,然后按照某种规则填充了进去。如果可以从脚本开始分析,或许能够找到存储弹幕的服务器和请求弹幕的参数。
有博文12指出了之前获取弹幕XML文件的两种方法依然适用:
1、https://comment.bilibili.com/视频的cid.xml
2、https://api.bilibili.com/x/v1/dm/list.so?oid=视频的cid
获取cid的方法可以去上面的博文里面查看。
虽然以上的两种方法依然适用,但是我现在,仍旧没有在F12的页面当中找到XML的传输记录