一、校园网服务器分析

我们的校园网,当我们连接上xxst时,处于它的局域网当中,只有我们获得认证授权之后才能访问外界网络,而认证授权这一操作对于单片机来说只不过是几行代码就能解决,而对于我没有系统学习过网络通信的人来说,确实有一点难度,所以在此记录一下。废话不多说,开始解析。

对于登录的方式,我们熟知的有form表单登录和Ajax登录,form表单登录据说涉及各种重定向的问题,抓包会烦躁一些。庆幸的是,此次用到的是Ajax登录,对于小白来说是降低了一定的难度。

首先,我们进入校园网认证系统,打开浏览器的F12开发工具,打开网络这一项,把我们的账号密码输入之后就可以看到一系列的交互信息了。

可以看到这里有很多交互信息,此时我们看到有一个login(登录)的页面,我们点击打开之后发现,页面携带的参数有username用户名,password密码,和一个不知名的challenge,所以上一个getchallenge我们也需要对其进行分析拿取challenge数据。

我们可以看到,上面的username还是明文,但是password确是一个字符串,通过猜想和查阅各个大佬的博客,可知网站对其进行了加密操作(真烦)。下面我们就看看加密的逻辑是什么样的。

已知我们的password进行了加密操作,所以我们对其源代码搜索password,发现才输入账号和输入密码之后有一个createChapPassword函数,猜想这里可能会有点故事,所以在此处打一个断点,输入账号密码登录之后发现果然程序运行到这里的时候停下了,账号和密码还是明文。那我们继续往下打断点看一下。会发现登录成功,而且密码已经进行了加密操作,结合大佬们的博客会发现问题就在这个函数上。我们打开这个函数看一下其中的操作。

通过百度,大致了解了这段加密代码其中的逻辑。首先id后有一个random随机数种子,先不管这个,继续往后看,可以看到请求方式是POST,数据格式为json格式。在往下看发现formCharCode这个函数,查阅发现是JavaScript中的函数,作用是将Unicode编码转换为一个字符,然后加上明文密码。好,继续往下看。下面紧跟着一个for循环,发现是和challenge有关,这就说回去了,刚开始我们的getchallenge是在这里要用到的。其中的逻辑也很简单一目了然,将challenge两两一组取出,然后将其进行进制转换得到,然后再加到str上。继续解析,发现md5这个玩意。我也是通过问同学才知道这是一种加密方式,说是加密方式不如说是一种消息摘要(具体怎么解决往下看就知道了)。最后将id转换为16进制加到md5加密后的hash之前。OK,逻辑已经理清,接下来就是代码实现。

二、代码实现

我们要进行login的post请求,必须先解决其需要携带的数据,即username、password和challenge。而username是明文,不用管,password要进行一系列操作,其中需要的就有challenge这个玩意,所以我们首先需要解决的是challenge。所以先进行第一步getchallenge。

查看getchallenge页面,会看到请求URL和方式POST,接下来就是代码实现:

首先定义字符串URL给请求url,实例化httpclient对象对其进行post请求,获取响应头发现和页面一样操作成功,接下来就是为后面密码操作拿到这个challenge值。代码实现很简单。这里我以为同时要拿取cookie值,为下一次post赋值,折腾了好久,后来重新F12查看了一下,居然没有cookie值,真是蠢到家了。。。我们只需要拿到challenge就OK了。接下来就是对密码进行加密操作了。

我们知道,对密码进行加密操作时需要有一个随机数,所以我这里直接给它赋一个定值,先将其进行转换然后把明文密码加上,接下来就是对challenge的操作了,实现在for循环里。

好了,challenge的操作也已经结束了,离成功还有一点,就是随机数id和md5加密。由于也是刚接触esp芯片,对其库不是特别了解,于是上github折腾了几次md5,都没有成功,一筹莫展。后来一个偶然的机会得知esp的库里有md5,啊啊啊啊啊啊啊啊啊啊啊啊西巴。一个简简单单的#include <MD5Builder.h>就解决的事。。。。。。。。代码如下:

接下来先让单片机连接进入局域网,因为初次连接无需密码,所以密码为空,代码实现如下:

离成功只差一步,就是post!实例化对象,.begin(url),addHeader,.POST(请求体)已经按耐不住了。。。。。桌子差点拍碎,哦不,手差点拍碎。。。。。。

总结

刚开始看到这个需求,一头雾水,没有接触过呀,郁闷了一天,只看不动手(我是fw)。后来一想,为什么不上手试试呢?开始查阅各种资料,模仿、学习,补了http协议知识,查看了esp官方库的介绍,开始动手。这种问题对于专业的人来说就是小菜一碟,对我这样的小白来说的话是有一定难度,写代码过程中发现自己的逻辑不清晰,对于底层的基础掌握更是一团浆糊,简单的各种数据类型转换就把我搞懵圈了好几次(骂了c语言一万次,顺便羡慕python这类万金油语言)。

希望自己可以继续努力,打牢基础,冲!!!

ESP32连接校园网,第一次接触网络通信,写一篇博客记录一下学习笔记。相关推荐

  1. 3个月时间,5名黑客找出苹果55个漏洞,赚了5万多美元,还写了篇博客记录全程

    大数据文摘出品 作者:刘俊寰.朱科锦.lin 昨天,翘首期待的iPhone12终于面世,不管是回归经典方框设计,还是首次推出小屏mini版,都让苹果玩家大呼过瘾. 不过,在今年这场别开生面的发布会之前 ...

  2. 如何坚持每周写一篇博客

    如何坚持每周写一篇博客呢? 在回答这个问题之前,让我们先来看看这个问题是怎么由来的? 工作时间长了,都是倾向于软文的.闲下来的时候宁愿去看看书,一篇好的技术文章耗费的精力比较多,而且当技术有了一定的进 ...

  3. 4. 写第一篇博客,最好的时间是今日,今时,今刻

    橡皮擦,一个逗趣的互联网高级网虫,为你带来新职场故事,搬来程序员敲门砖. 已完成文章 国内,首套,成体系,技术博客写作专栏发布啦 技术博客只能写技术文章吗?当然是由我们自己来定义. 为"她& ...

  4. 【科研】科研好物分享:好用到写一篇博客总结的程度

    给老师交完初稿等反馈中,整理一下写作中用到的绝佳好物,每一个都有天天使用!另外,我是一个很讨厌在电脑上装各种软件的人,所以有网页版的软件我是绝对不会安装程序的!下面推荐全都是网站~ 只告诉好朋友的科研 ...

  5. 2013年新的开始,每周至少要写一篇博客!

    今天是2013年上班的第一天,在新的一年开始之际,要求自己每周至少一篇博客来记录自己学习.工作.生活的历程! 同时逐渐整理一些做过项目用到的东西,温故而知新! 转载于:https://www.cnbl ...

  6. 注册博客,写第一篇博客

    1.自我介绍. 大家好,我是一棵计算机科学与技术专业的大一白菜.我来到CSDN已经一年了,这是我的第一篇博客,也是我记录编程学习的开始.我的专业兴趣在于网络安全方向,目标是成为某厂中的一员.接下来,我 ...

  7. 打一局王者荣耀比写一篇博客要容易的多!

    也许你不必如此努力,或许你该更加努力 生活即是如此,迷失于游戏和享受,最后又懊悔自己没有干某件事情. 别人玩自己也玩,当看到别人比自己过的好时往往又羡慕别人.殊不知一昧的玩乐中自己已经迷失,剩下的只有 ...

  8. 泥瓦匠:程序猿为啥要坚持写原创技术博客?

    世界上最廉价的原创是什么?答案希望你从这篇文章中找到. 一.前言 当几年前,接触博客这个词,还是从学长那边.因为他说他学技术,喜欢把遇到的问题,总结到博客上.我就寻思着,学着呗,反正不亏.然后我写了第 ...

  9. 第一次写CSDN的博客

    第一次的CSDN博客记录 周围的人慢慢的都变成了码农,这也慢慢的开始影响了我,于是也开始敲代码了,之前也经常有听说CSDN,今天终于是得以见到. 一开始见到写博客的界面那是一脸懵,有点不知道这玩意咋操 ...

最新文章

  1. Android NDK学习笔记2:数组
  2. CRM batch product check logic in one order line item
  3. python中sorted的用法append_Python中高阶函数sorted()用法
  4. Linux基本命令解析(1)
  5. c#开发大全、系列文章、精品教程
  6. @RequestParam
  7. 利用并查集+贪心解决 Hdu1232
  8. Apache Jmeter压力测试
  9. IEEE ACCESS模板下载
  10. PTA-1021-Deepest Root
  11. vue 运行项目浏览器页面显示“该网页无法正常运作”
  12. 《实用C++》第10课:if 语句实现关系运算
  13. 微信小程序input调用数字键盘没有小数点
  14. visual basic_Visual Basic的随机数生成的检验
  15. linux下删除软连接
  16. 传奇3的WIL文件格式
  17. 如何将普通交换机实现POE供电?
  18. 洛谷 P5108 仰望半月的夜空 解题报告
  19. java.lang.IllegalStateException: Failure saving state: active HomeFragment has cleared index: -1
  20. UI交互设计好学吗?如何成为优秀设计师

热门文章

  1. Python编程从入门到实践 第十章:文件和异常 练习答案记录
  2. NSURLSESSION使用实战教程
  3. 读取统计微信捐款(matlab)
  4. graphpad分组百分比柱状图_如何用GraphPad Prism 8.0绘制分组散点图与柱状图共存图?...
  5. fitbit手表中文说明书_Fitbit OS达到3.0版,这是新功能
  6. h5开启摄像头拍照+腾讯云接口人脸验证
  7. python3结果窗口打开_python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法...
  8. 小米10至尊纪念版和Redmi K30至尊纪念版的区别 哪个好
  9. poi word文档在书签处插入图片
  10. 2017高考计算机试卷,2017年高考模拟试卷 信息技术卷.doc