ACodingDayBlog

Fiddler + Postman 登录校园网

Fiddler + Postman 登录校园网
2021-12-18 · 8 min read
折腾 Windows 软件

前言

以前学校用的是二级宽带「鹏博士 - 长城宽带」拨号,再搭配百度网盘下载,苦不堪言 😅!后来换了联通宽带,价格也降了,才能愉快地上网冲浪。
但联通宽带的体验也不完美,因为有时候网络会莫明其妙地被强制下线了,那时我正处于游戏 / 视频面试 / 在线考试 / 观看比赛......甚至有时候会登录不上,很烦 😤。

分析

有时候,手机链接校园网 WiFi ,信号满格,账号密码也正确,但就是在显示“获取 IP 地址中”,登录不上。过了一段时间再尝试又可以了。
我的猜测:校园网 WiFi 分配的 IP 地址是 DHCP 动态分配的,而连接的设备数已经达到无线路由器的连接数最大值,所以分配不到 IP 地址。

电脑是插网线连接以太网的,打开浏览器登录自助管理后台查看,下线的原因有几种:
主要原因

  • 其中,“运营商主动下线”占据了大部分,这种情况也不奇怪:百度贴吧 - 路由器吧
  • 字面意思理解“空闲超时”——为避免浪费带宽,某些局域网 / 共享式宽带接入的 ISP 通常会设置无操作下线时限,如果用户在规定的时间内无网络请求,线路上没有业务流量,就会自动断网。
  • “清单拆分”,我不理解。
  • “管理员重置”,我无法阻止。

既然无法阻止断网,断网的时间也无规律可循,那只能在断网后及时重新登录了。
我在想,既然是在浏览器中使用表单登录,那是否能通过抓包数据获取到登录网络的必要数据呢?

折腾

Fiddler 抓包

Fiddler 是强大的抓包工具,能够记录所有客户端和服务器的 HTTP 和 HTTPS 请求,允许监视、设置断点,查看所有的“进出” Fiddler 的数据。
Fiddler 官网中有几款不同定位的产品,一般说的 Fiddler 都是指 Fiddler Classic

略过软件的那些下载与安装步骤,直接开始使用工具。

  1. 先设置允许捕获 HTTPS 流量:点击顶部工具栏“Tools”,点击第一个子菜单“Options...”,展开的界面如下所示:点击“HTTPS”选项,将“Capture HTTPS CONNECTS”、“Decrypt HTTPS traffic”勾选上,这分别是允许捕获 HTTPS 请求、解密 HTTPS 流量。如果是第一次使用,勾选之后会提示你安装一个证书,这个证书是用来做中间人进行抓包的,Fiddler 使用此证书来解密所捕获到的流量,再加密转发到相对应的服务器端或客户端。
    设置步骤1
    如果没有安装过,点击“Yes”安装即可;如果没有弹框提示安装,可以点击“Actions”按钮,进行安装。
  2. 接着选择需要捕获的 HTTPS 流量:在下拉列表中,有 4 种选择:
    设置步骤2
    • from all processes:抓取所有进程的 HTTPS 流量;
    • from browsers only:只抓取浏览器的 HTTPS 流量;
    • from non-browsers only:只抓取除了浏览器以外的所有 HTTPS 流量;
    • from remote clients only:只抓取远程客户端的 HTTPS 流量。
      这里选择第 2 种。
  3. 然后设置连接的相关信息:点击顶部的“Connections”选项,这里只需要设置监听的端口号,其他默认。你可以将“Fiddler Classiclistens on port”中的默认端口号 8888 改为你想要的(不要与常用服务的默认端口号相冲突),我这里改为 8889
    设置步骤3
  4. 搞定 Fiddler 的设置后,接着需要对浏览器进行设置:打开浏览器,安装 “Proxy SwitchyOmega”扩展插件。如果你无法访问 Chrome 扩展商店,那就打开 Edge 扩展商店 安装,或者打开 CrxDL.COM 下载离线安装包。
    安装此插件
  5. 打开“Proxy SwitchyOmega”扩展的设置,如下图所示(已完成效果):先点击“新建情景模式”,会弹窗让你填写,“情景模式名称”随意填写,为了方便,我这里填写为“fiddler”,其他默认,点击“创建”。“代理服务器”输入框中,“代理协议”选择“HTTP”,“代理服务器”为本地地址,“代理端口”为之前在 Fiddler 中设置的监听端口号。最后点击“应用选项”来保存设置。
    完成设置
  6. 最后启用该扩展,点击选择刚才设置的情景模式“fiddler”来使用,即可开始抓包。
    开始使用
  7. 打开 Fiddler 后,在浏览器地址栏中输入“1.1.1.1”,自动进入到校园网登录界面。在 Fiddler 中,可以看到捕获到的信息,如下图所示:
    捕获结果
    在左侧上方可以看到各列头,分别是:
    • Result:HTTP 状态码,例如 302 就是重定向,200 就是请求成功。
    • Protocol:请求协议,例如 HTTP / HTTPS / FTP。
    • Host:请求地址的主机名,例如我输入的“1.1.1.1”。
    • URL:请求资源的位置。
    • Body:请求的大小。
    • Caching:请求的缓存过期时间或缓存控制值。
    • Content-Type:请求响应的类型。
    • Process:发送该请求的进程的 ID。
  8. 如果觉得 Fiddler 的字体太小了,点击“Appearance”选项,可以修改字体及其大小,如下所示:
    设置字体

分析源代码

  1. 鼠标双击左边的请求,会在右边显示具体的信息。分析一下,就大概知道:在浏览器地址栏输入“1.1.1.1”后重定向到“http://1.1.1.1:8888/webauth.do?wlanacname=&wlanuserip=&mac=&act=LOGINSUCC&errorMsg=运营商网络拨号成功&url=http://1.1.1.1”,即地址栏显示的内容(关键信息省去),同时也可以知道这是一个 GET 请求,以及 port、wlanacname、wlanuserip、act、url 等信息,还看到一个临时的 Cookie......在右侧界面的下方返回的是加密后的内容,点击解密一看就明白是登录界面的 HTML 文件代码,对应了“text/html;charset=utf-8”。
  2. 在浏览器按 F12 打开控制台,点击“检查元素”,对着“登录”按钮,查看按钮的点击事件。
    查找源代码
  3. 在网页中检查源码发现,在按钮的点击函数中只有一个函数 limitSubmit(),这个函数的作用是统计点击登录按钮的次数,一旦点击过快就会提示,然后触发函数 subCheckParam(),这个函数的作用是检查表单提交的参数,一旦输入为空、未勾选就提示,最后提交。
  4. 可以看到表单的提交地址附加了一个参数 urlPam,而恰好这个完整的地址就是地址栏的链接。
$("#goLoginForm").attr("action", "/webauth.do?" + urlPam).submit();

Postman 调试

虽然 Fiddler 也有模拟请求的功能,但我还是习惯使用 Postman
已经得到了表单的提交地址,Fiddler 提供了方便的查看方式,其中包括 Headers、WebForms、Cookies、Raw、JSON 等,点击“Raw”,将其复制填写到 Postman 中,如果觉得不好复制,可以点击右下角的“View in Notepad”(用记事本打开)。
Raw格式

Postman 中,首先选择提交方式为 POST,然后输入提交地址,在“Headers”选项中填写上述的数据,
在“Body”选项中填写登录表单的参数,如下图所示:
Headers数据

登录表单的参数,一开始我以为只有用户账号、用户密码、记住我这三个,但始终登录不成功。后来在 Fiddler 中点击“WebForms”查看参数,才发现居然有将近 20 个!还好 Postman 也提供“Raw”格式的数据,直接复制粘贴。
登录参数

后续

拿到了登录参数之后,浏览器点击下线,然后使用 Postman 提交表单模拟登录成功了。
但是我的初衷是,检测到断网后可以自动化登录,而不仅仅是用 Postman 去登录,毕竟打开 Postman 点击“Send”按钮和打开浏览器点击“登录”按钮一样,没省什么步骤。
用 Python 编写程序再打包成 EXE 文件,还是编写 Windows 批处理文件更方便?🤔

参考

  1. 稀土掘金 - 笑笑猫爱小小鱼
  2. CSDN - Fiddler Classic