短信接口抓包_[实战] 实现抢票小工具&短信通知提醒

作者:西岚

写在前言

要知道在深圳上班是非常痛苦的事情,特别是我上班的科兴科技园这一块,去的人非常多,每天上班跟春运一样,如果我能换到以前的大冲上班那就幸福了,可惜,换不得。

尤其是我这个站等车的多的一笔,上班公交挤的不行,车满的时候只有少部分人能硬挤上去。通常我只会用两个字来形容这种人:“公交怪”

想当年我朋友瘦的像只猴还能上去,老子身高182体重72kg挤个公交,不成问题,反手一个阻挡,闷声发大财,前面的阿姨你快点阿姨,别磨磨唧唧的,快上去啊阿姨,嗯?你还想挤掉我?你能挤掉我?你能挤掉我!我当场!把车吃了!

....

咳咳,挤公交是不可能挤公交滴,因为今天我发现了一个可以定制路线的网约巴士公众号【深圳xxx】

但是呢,票经常会被抢光,同时我还我发现,有时候会有人退票,这时候就有空余票了,关键是我不可能时时都在公众号上盯着,于是,我就写了一个抢票+短信通知的小工具

获取接口信息

查看页面结构

这个就是订票页面,显示当前月的车票情况,根据图示,红色为已满,绿色为已购,灰色为不可选 00506e9fbf1d5c2220601bbd07991a33.png 如果是可选就是白色的小方块,并且在下面显示余票,如下图所示:

3d1017de2ff0c98c8b8c9d4361bb8e32.png 我们打算这么做,

  1. 定时抓取返回的接口信息

  2. 根据接口返回值判断是否有余票

好,审查下源代码看下接口信息,等等,微信浏览器没办法审查源代码,于是

使用chrome 调试微信公众号网页页面

首先面临个问题,如果直接copy公众号网页Url在chrome打开的话,就会显示这个画面,他被302重定向到了这个页面,所以是行不通的,只有获取OAuth2.0授权才能进去

06ac4dfeb598e04c8fbb252959653e9b.png

所以我们得先通过抓包工具,知道手机访问微信公众号网页的时候,需要带什么信息过去,这时候我们就得借助抓包工具,因为我电脑是Mac,用不了 Fiddler,我用的是 Charles花瓶,就是下面这位仁兄

0b447b34f7c0c6589415ba7b3fe11496.png 借助这个工具,我们只需3步就可以轻松搞定手机数据抓包:

  1. 获取本机IP地址和端口

  2. 设置代理手机上网

  3. 依次执行上面两步

获取本机IP地址和端口

第一步,找到端口号,一般默认是8088,但是为了确认可以打开 ProxyProxySetting看下,哦原来我之前设置成了8888

09e34897126b6b2a6ec388c7efed5922.png 然后找到 Charles的 helpLocalIPAddress,点击它就会看到自己的本机地址,找到本机地址记下来,然后进行下一步

33ee5ac1f8384e38bc870e830876ae0f.png

设置代理手机上网

首先保证手机跟电脑连接的是同一个wifi,然后在wifi设置那里会有设置代理信息,比如我的猴米...不对,小米9手机!设置如下:

输入上一步获取主机名,端口号就ok了 461261ab9882f902622773e62a0507f5.png

输入完成,点击确定后。 Charles就会弹出一个对话框,问你是否同意接入代理,点击确定allow就行了。

用手机访问目标网页

我们用手机访问微信公众号【深圳x出行】进入到抢票页面后,发现 Charles已经成功抓包到了网页信息,当我们进入这个抢票页面的时候,他会发起两个请求,一个是获取document文档内容,一个post请求获取票务信息。

仔细分析了下,大概明白了业务逻辑:

整个项目技术站是java+jsp,传统写法,用户身份验证主要是cookie+session方案,前端这一块主要是使用 jQuery

当用户进入页面的时候,会携带查询参数,如起始站点,时间,车次等信息和cookie请求document文档, 也就是圈起来的这一块, 5be4b858250e3561ec2f754661ef9632.png

fb536ab2aab64ed2ddeb457ed5471799.png 而我们想要的核心内容:日历表,一开始是不显示的

因为还要在请求一次

第二次请求,携带cookie和以上的查询参数发起一个post请求,获取当月的车票信息,也就是日历表内容

下面这个是请求当月票务信息,然而发现他返回的是一堆html节点

好吧...估计是获取到之后直接 append到 div里面的,然后渲染生成日历表内容 2bcb4384e250633523053f0048b5ccb0.png

接着在手机上操作,选择两个日期,然后点击下单,发送购票请求,拉取购票接口,我们看下购票接口的请求和返回内容:

656612f89878d13b26ccd25fc44d0f6d.png 看下request 内容,根据字段的意思大概明白是线路,时间,以及车票金额,还有支付方式

在看看返回的内容:返回一个json字符串数据,里面大概涵盖了下单的成功返回码,时间,id号等等信息 ea29f1236e0a3c16bd4cb4ec6aadf393.png

记录所需要的信息内容

根据上面的分析,总结下内容:整个项目用户身份验证是使用 cookie和 session方案,请求数据用的是 form data方式,请求字段啥的我们也都清楚,唯独有一点,就是请求余票的时候,返回的是html节点代码,而不是我们预期的json数据,这样就有个麻烦,我们没办法一目了然的明白他余票的时候是如何显示的

所以我们只能通过 chrome进行调试,才能得出他是如何判断余票的。

我们找个记事本,记录下信息,记录的内容有:

  1. 请求余票接口和购票接口的 url地址

  2. cookie信息

  3. 各自的 request参数字段

  4. user-Agent信息

  5. 各自的 response返回内容

设置chrome

有以上信息后,我们就可以开始用chrome调试了, 首先打开 MoretoolsNetworkconditions

f3c5af5251a90c0485e906a4d5bf4ce9.png 把 user-Agent填入到 Custom里面

ecdb1d173d4ba18d338e256b15566bf0.png

Charles抓包本地请求

因为我们要把获取到的cookie填入到chrome里面,以我们的用户身份去访问网页,所以我们需要在请求目标地址的时候,改包修改cookie

首先我们需要开启 macOSProxy,抓包我们的http请求

2b5253c99af1c395cf1cf6722856f87e.png 打开chrome访问目标网址,我们可以看到 Charles上已经抓包到了我们访问的目标url地址,然后给目标url地址打上断点,方便调试

f447f98baa8b27d250ba5ea5ebeb1f46.png 然后再次访问,这时候断点就生效了,弹出一个tab名为 breakpoints,可以看到之所以我们还是不能访问到目标网址,是因为 sessionId不对,所以我们把抓取到的 cookie在填入到里面,点击 execute

ea866beb06c772fc5cba9dd965082322.png 这时候,能够正确跳到目标页面了。

48e1e101d3e9d827835b579123eb5401.png 大概看了下他整体布局,和 jQuery代码 CSS代码,特别是日历表那一块

审查了下元素发现:

  1. 小方块的结构为:

class="b">

这里为日期

如果有余票则显示余票数量

  1. td的样式名为 a代表不可选

  2. 样式名为 e代表已满

  3. 样式名为 d代表已购

  4. 样式名为 b则是我们要找的,代表可选,也就是有余票

到这一步,整个购票流程就清楚了

到时候我们通过Node.js请求的时候,处理返回数据,用正则去判断是否有余票的class名 b ,有余票的话,在获取div里面的余票数量内容就Ok了

Node.js 请求目标接口

分析需要开发的功能点

写代码之前我们需要想好功能点,我们需要什么功能:

  1. 请求余票接口

  2. 定时请求任务

  3. 有余票则自动请求购票接口下订单

  4. 调用腾讯云短信api接口发送短信通知

  5. 多个用户抢票功能

  6. 抢某个日期的票

首先 mkdir ticket 创建名为ticket的文件夹,接着 cd ticket进入文件夹 npm init

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要利用抓包工具分析报文并实现抢票自动化的流程,可以按照以下步骤进行操作: 1. 安装抓包工具:选择一款适合你的操作系统的抓包工具,例如Fiddler、Charles、Wireshark等,并按照其官方文档进行安装。 2. 配置抓包工具:打开抓包工具并进行必要的配置,如设置代理、启用SSL解密等。 3. 打开抢票页面:使用浏览器打开大麦app的抢票页面,准备进行手动抢票操作。 4. 开始抓包:在抓包工具中开始抓包,确保它能够捕获到与大麦app相关的网络请求和响应。 5. 执行抢票操作:在浏览器中进行手动抢票操作,包括点击按钮、选择座位、填写订单信息等。 6. 分析报文:在抓包工具中查看捕获到的报文,并找到与抢票相关的请求和响应。可以通过观察报文的参数、头部信息、URL等来理解抢票流程。 7. 编写自动化程序:根据分析得到的报文,编写自动化程序来模拟抢票流程。可以使用编程语言和相应的网络请求库,如Python的requests库或Selenium库。 8. 实现自动化流程:根据分析得到的报文,编写程序来自动发送请求、处理响应,并模拟用户的抢票操作。可以使用抓包工具抓取到的报文作为请求的参数、头部信息等。 需要注意的是,大麦app的抢票流程可能会有一些反爬虫机制,如验证码、动态参数等。在编写自动化程序时,可能需要处理这些机制,以确保程序的稳定性和可靠性。另外,使用抓包工具进行网络抓包是一种常见的技术手段,但在实际应用中需要遵守相关法律法规和道德规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值