通过抓包,实现Python模拟登陆各网站,原理分析!
Posted q1613161916
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过抓包,实现Python模拟登陆各网站,原理分析!相关的知识,希望对你有一定的参考价值。
![技术分享图片](https://image.cha138.com/20210705/102d0e7d4e134f9ea38d011ae02bf2a5.jpg)
一、教程简介
1.1 基本介绍
通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方法,使用 Firefox 抓包分析插件分析网络数据包等知识。
模拟登录可以帮助用户自动化完成很多操作,在不同场合下有不同的用处,无论是自动化一些日常的繁琐操作还是用于爬虫都是一项很实用的技能。本课程通过 Firefox 和 Python 来实现,环境要求如下:
- Python 库:urllib, http.cookiejar, Django
- Firefox 要求:装有 live http header插件 (已提供)
![技术分享图片](https://image.cha138.com/20210705/76cb52e19b0f4b5aa3e683cbe6515f8c.jpg)
1.3 材料
![技术分享图片](https://image.cha138.com/20210705/0da75b491beb4ea48ecb3b7ead4884ba.jpg)
1.4 准备
1) 安装抓包插件Live Http Headers
![技术分享图片](https://image.cha138.com/20210705/271fea0880ce45c58cb72564a7c4007e.jpg)
![技术分享图片](https://image.cha138.com/20210705/ff948432cfde4b92bade928570e0311b.jpg)
![技术分享图片](https://image.cha138.com/20210705/71645827267e469e8592cd6c53153a55.jpg)
![技术分享图片](https://image.cha138.com/20210705/f8423e0cb8f84f07a2569188acb9bab0.jpg)
![技术分享图片](https://image.cha138.com/20210705/2373d60173f44ac9a25ff81182a2bf8b.jpg)
2)启动web应用
使用 ps -aux | grep codebox 查询获得 codebox 的进程号,然后使用 kill -9 进程号 停止 codebox 进程。执行过程见下图:
![技术分享图片](https://image.cha138.com/20210705/76f031f320a84020bb740a62a0740ac3.jpg)
首先安装demo依赖的web框架django,并测试是否安装成功:
![技术分享图片](https://image.cha138.com/20210705/4d34a40b75ad4e3fabd147fe6bbaac93.jpg)
启动成功后在浏览器中输入 http://localhost:8000/polls 看到登录页面表示启动成功
![技术分享图片](https://image.cha138.com/20210705/69f7a3b6c09b4a17ab64e1c99512a661.jpg)
二、分析登录过程
要通过编程实现登录,首先需要理解一般Web应用的登陆过程。
![技术分享图片](https://image.cha138.com/20210705/4780c682c2b941a280c4cb08424c25e7.jpg)
2.1 抓取请求
![技术分享图片](https://image.cha138.com/20210705/f26640c12da6449ea0bf38f165306fab.jpg)
2.2原理分析
![技术分享图片](https://image.cha138.com/20210705/0369f881b0cf4b2eb5dc55e807382138.jpg)
![技术分享图片](https://image.cha138.com/20210705/e7c9bcd1e0ee444dbc64d5b478141f51.jpg)
为什么是2个请求而不是1个呢?通过分析登录请求发现,登陆成功之后服务器发送了302重定向响应,服务器要求浏览器重新请求首页,这就产生了第二个请求。再来分析第二个请求,可以看到它相比登录请求多了一个请求头:
![技术分享图片](https://image.cha138.com/20210705/a098dc02706743aba4eb636255c7e33c.jpg)
整个登录流程如下图所示:
![技术分享图片](https://image.cha138.com/20210705/e7b98fe8424a4ff18e631b01eebf7f01.jpg)
服务器到底是如何区别不同用户的session的?为什么登陆成功会后要回写cookie呢?
![技术分享图片](https://image.cha138.com/20210705/b6c0c2326c234c609abf82ad29c25c98.jpg)
2.3小结
对于服务器来说,登录=验证+写session。对于浏览器来说,登录=发送登录信息+获取带sessionid的cookie。可以说,只要获得了sessionid,就算实现了模拟登录。有了它我们便可以游离于系统之中。
三、使用Python实现登录(简单实例)
理解了登录过程的原理和细节之后,开始用Python来编写模拟登陆程序吧。
![技术分享图片](https://image.cha138.com/20210705/22f2f4bad6c24943968b1e63cc8deea1.jpg)
3.1导入模块
不要忘记编写文件头、导入必要的依赖模块
![技术分享图片](https://image.cha138.com/20210705/7358d65d12ff45d5893967aba47e656b.jpg)
3.2构造登录请求
![技术分享图片](https://image.cha138.com/20210705/a11b6c3f56ff40d19a5e244b94d36524.jpg)
登录请求的实体部分如下:
![技术分享图片](https://image.cha138.com/20210705/0d82d0216e544abb84b04eb87a79b071.jpg)
![技术分享图片](https://image.cha138.com/20210705/adc56a567b25438aa43660b326debc28.jpg)
全部Python代码:
![技术分享图片](https://image.cha138.com/20210705/16890f96ed1b4fb99e559fabc86bea8e.jpg)
附加参数
![技术分享图片](https://image.cha138.com/20210705/378f9a2e9cd74d28a6c74466f6b2c423.jpg)
防盗链
Web 应用的资源都是有url的,只要获得了url就能够在任何地方引用。听起来很方便,但这可能会导致你的资源被别人盗用。
![技术分享图片](https://image.cha138.com/20210705/6d2cbdea5c61460d9f60271df7098f9f.jpg)
3.3发送请求并保存cookie
![技术分享图片](https://image.cha138.com/20210705/bd190ae3db0641a7a945148550d54abd.jpg)
Python代码如下:
![技术分享图片](https://image.cha138.com/20210705/723b09a5303b4da2af50b942306cba33.jpg)
如果登陆成功
![技术分享图片](https://image.cha138.com/20210705/cce389460b2c4598a0a0a644ef21f4dd.jpg)
就可以在指定的文件my_cookies.txt中看到sessionid了。
3.4 使用cookie访问系统服务
![技术分享图片](https://image.cha138.com/20210705/6c48fa7db95949659b5b2bd4c18eae01.jpg)
![技术分享图片](https://image.cha138.com/20210705/f6a85c7b02de473faf49bdbc232e6243.jpg)
![技术分享图片](https://image.cha138.com/20210705/459710a840bb4ce399d1f8701e2b0f7d.jpg)
在我们模拟登录成功后,就可以直接通过opener打开这个url来使用这项系统服务。代码实现如下:
![技术分享图片](https://image.cha138.com/20210705/ba8a6107150b40078f56cfb46b49a017.jpg)
如果有是在另外一个python文件中使用这个cookie的话,再打开url之前需要先载入cookie:
![技术分享图片](https://image.cha138.com/20210705/6b96d06ab3af4d51ba2795dae2fe095e.jpg)
教程取自实验楼。
以上是关于通过抓包,实现Python模拟登陆各网站,原理分析!的主要内容,如果未能解决你的问题,请参考以下文章