2022年 11月 16日

python模拟登录网站_通过抓包,实现Python模拟登陆各网站,原理分析!

1.1 基本介绍

通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方法,使用 Firefox 抓包分析插件分析网络数据包等知识。

模拟登录可以帮助用户自动化完成很多操作,在不同场合下有不同的用处,无论是自动化一些日常的繁琐操作还是用于爬虫都是一项很实用的技能。本课程通过 Firefox 和 Python 来实现,环境要求如下:

Python 库:urllib, http.cookiejar, Django

Firefox 要求:装有 live http header插件 (已提供)

5a8d506b94f5f1334bec0326bcb280fd.jpeg

1.3 材料

79cda837401a5186a28f68687c0f935f.jpeg-wh_600x-s_1946029394.jpeg

1.4 准备

1) 安装抓包插件Live Http Headers

032660c21d203c749281c7d08c097ede.jpeg-wh_600x-s_507179750.jpeg

2192495160962dcf158b37e198df718a.jpeg

51d198833a3704feffda7883ed6c65a7.jpeg

0350f1908dda862bd699ba5ee40a1294.jpeg-wh_600x-s_2337527825.jpeg

8dc54d13e2c19d7dea6e6d0df45bc4b1.jpeg

2)启动web应用

使用 ps -aux | grep codebox 查询获得 codebox 的进程号,然后使用 kill -9 进程号 停止 codebox 进程。执行过程见下图:

f04d90a0d56137e20bb0a13c6342b685.jpeg

首先安装demo依赖的web框架django,并测试是否安装成功:

95b7d4733e4a988ac9438ea251dd7b4a.jpeg

启动成功后在浏览器中输入 http://localhost:8000/polls 看到登录页面表示启动成功

c91f8c87ce45ee913835c477e834dfb6.jpeg

二、分析登录过程

要通过编程实现登录,首先需要理解一般Web应用的登陆过程。

9b1a085e7cd4e800a33b1e129c1552da.jpeg-wh_600x-s_1599557008.jpeg

2.1 抓取请求

7ff6984ee20f71f2cc8f871840ed0c52.jpeg

2.2原理分析

5d176f2aaa8312dafcdd79dc4435429f.jpeg-wh_600x-s_4222988222.jpeg

0d6aabe505bdbb257c5e8ca67d5a6555.jpeg

为什么是2个请求而不是1个呢?通过分析登录请求发现,登陆成功之后服务器发送了302重定向响应,服务器要求浏览器重新请求首页,这就产生了第二个请求。再来分析第二个请求,可以看到它相比登录请求多了一个请求头:

0b116a19663580a8bcf1cd187008ead9.jpeg-wh_600x-s_1897517048.jpeg

整个登录流程如下图所示:

b6e793bb83b16d9b563a20b244002d0c.jpeg

服务器到底是如何区别不同用户的session的?为什么登陆成功会后要回写cookie呢?

4ccd758ae53ba7afea5c73ec03ef8e64.jpeg-wh_600x-s_4175464353.jpeg

2.3小结

对于服务器来说,登录=验证+写session。对于浏览器来说,登录=发送登录信息+获取带sessionid的cookie。可以说,只要获得了sessionid,就算实现了模拟登录。有了它我们便可以游离于系统之中。

三、使用Python实现登录(简单实例)

理解了登录过程的原理和细节之后,开始用Python来编写模拟登陆程序吧。

f1701a41edb76ed433d7c3c8a7d5f687.jpeg

3.1导入模块

不要忘记编写文件头、导入必要的依赖模块

46b5fd3284106d07733e51043195f58e.jpeg

3.2构造登录请求

54a03c9cefd95c1643655287d3dd9ff2.jpeg-wh_600x-s_1510919690.jpeg

登录请求的实体部分如下:

ff4ef3466b8e557bee836724b3014f68.jpeg

a688e244e488f0b035fca309c89206d5.jpeg-wh_600x-s_3494903041.jpeg

全部Python代码:

c63ec83df77f9d82121014bfa7b4a1b7.jpeg-wh_600x-s_205191336.jpeg

附加参数

3a9eb8618c46bfe58ec78b1194d7d737.jpeg-wh_600x-s_2298885852.jpeg

防盗链

Web 应用的资源都是有url的,只要获得了url就能够在任何地方引用。听起来很方便,但这可能会导致你的资源被别人盗用。

1ab3701c6f7137585b778d23782ac079.jpeg-wh_600x-s_978579022.jpeg

3.3发送请求并保存cookie

fd20d9a33083031706c48a5e4a655a01.jpeg-wh_600x-s_591319135.jpeg

Python代码如下:

9276926ab9785fe3592050ff664f592c.jpeg

如果登陆成功

cb7500970a4c6ce362611fe36067bf9f.jpeg-wh_600x-s_3887897973.jpeg

就可以在指定的文件my_cookies.txt中看到sessionid了。

3.4 使用cookie访问系统服务

9cfbf5071d459ce23df26b23e06b4360.jpeg-wh_600x-s_4235831704.jpeg

e0e801457522d8fc326638083081d24d.jpeg

b8c4871fb00443073cff3a36d79ce949.jpeg

在我们模拟登录成功后,就可以直接通过opener打开这个url来使用这项系统服务。代码实现如下:

48f01abf0892a7d2396ab58524dc2d6e.jpeg

如果有是在另外一个python文件中使用这个cookie的话,再打开url之前需要先载入cookie:

0f3ee4c658d01c37cb3c81b5d55fdbe8.jpeg-wh_600x-s_4133323999.jpeg