前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录一次网站被刷请求次数统计

记录一次网站被刷请求次数统计

作者头像
吃猫的鱼Code
发布2023-10-03 08:35:35
2560
发布2023-10-03 08:35:35
举报

前言

今天突然收到多吉云的通知,说请求数激增,我的个人生活博客,https://my.404.pub两个小时内cdn请求数量达到两百多万次:

image-20231002133752107
image-20231002133752107

着实离谱,怕不是又惹了何方神圣。

看到后我赶紧上多吉云后台登录,做了一下补救,好在流量并没有消耗很多,只是请求数被刷了两百多万次。

于是赶紧去限制了一下请求的访问限制,防止被一直刷请求次数。

image-20231002134305872
image-20231002134305872

但是,单单这样限制也是会被一直消耗请求次数,不能从根本上解决问题,于是我等时间到了后,去下载了多吉云的日志文件,打算统计一下刷的ip地址然后将它们屏蔽掉。

下载日志文件后,我发现有五十多兆...人为去统计一个一个ip肯定是不现实的...

image-20231002134716845
image-20231002134716845

统计每个ip访问次数

人为统计不现实,于是我想到了用python,对这个文件的数据进行统计:

首先看看文件里面的数据格式,文件 内容太多,这里就列举几条数据作为展示:

代码语言:javascript
复制
20231002112543 104.239.97.108 my.404.pub / 0 -1 -1 0 NULL 7095 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "(null)" GET HTTPS miss 51287

20231002112543 104.239.97.138 my.404.pub / 0 -1 -1 0 NULL 7088 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "(null)" GET HTTPS miss 44763

20231002112543 104.238.14.206 my.404.pub / 0 -1 -1 0 NULL 7169 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "(null)" GET HTTPS miss 55665

20231002112543 104.239.97.78 my.404.pub / 178 -1 -1 524 NULL 9 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "(null)" GET HTTPS hit 44341

这样一大串数据摆在面前,人为的话...就算了...

然后直接开始编写代码,大概思路是通过读取文件内容,统计提取出每个ip出现的次数,然后用降序的方式写入新的result.txt文件,便于我查看哪些ip是频繁发起请求的。

实现的python代码如下:

代码语言:javascript
复制
# 打开文件
with open('data1.txt', 'r') as f:
    # 初始化字典
    ip_dict = {}
    # 遍历文件中的每一行
    for line in f:
        # 通过空格分割每一行的元素
        items = line.split()
        # 取出第二个元素作为 IP
        ip = items[1]
        # 如果 IP 在字典中已经存在,则将其对应的value+1
        if ip in ip_dict:
            ip_dict[ip] += 1
        # 如果 IP 在字典中不存在,则添加到字典中,并将其对应的value置为1
        else:
            ip_dict[ip] = 1

# 对字典按照 value 值进行排序,并将排序结果写入 result.txt 文件
with open('result.txt', 'w') as f:
    for k, v in sorted(ip_dict.items(), key=lambda x: x[1], reverse=True):
        f.write(f'ip: {k}, 出现次数: {v}\n')

逻辑上还是比较简单的实现逻辑的,然后通过这样操作,最后得到了result.txt让我一览所有访问ip的次数,然后就可以愉快地屏蔽了。

image-20231002135201475
image-20231002135201475

这些都是些高频访问的ip,我会去查一下它们地址,发现都是海外请求,果断直接给屏蔽了。

最后

最后,其实这次被刷,虽然量并不是很大,但是也给我们敲响了警钟,被攻击,被刷的概率还是有的,所以还是要做好万全的准备,包括但不限于做好防护的措施,比如限制最高访问频率等策略,减少自己的损失...

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 统计每个ip访问次数
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com