首页 > 其他分享 >当我遇到了爬虫

当我遇到了爬虫

时间:2024-06-03 11:56:28浏览次数:23  
标签:req 遇到 ua xxx 爬虫 local limit ngx

运维同学,线上机器怎么又双叒叕挂了?

 

对爬虫也是相爱相杀多年,我对线上爬虫的应对出现的几个阶段:

1、分析日志,找出异常请求,封ip。

2、通过waf,针对某个uri ,进行限流(并且人机识别),控制的还是源ip,起初有点成效。

3、遇到大量单ip,触发不到人机识别,通过nginx自带的limit_req_zone进行uri限制,发现有效果,但是会误杀很多无辜。

map $request_uri $xx_limit {
    "~*/xxx/" "/xxx/";
    default "";
}
limit_req_zone $xx_limit zone=api_limit:10m rate=5r/s;

当请求路径包含/xxx/时,设置$xx_limit 为/xxx/,默认值为空,为空则limit_req_zone 不生效




limit_req zone=api_limit burst=10 delay=5;

每秒标准5个请求,burst可以让突发请求到10个,delay是当有突发请求时前五个直接请求,剩余的rate=5/s=200ms/个,消费1个,等待200ms

 

4、通过openresty,将请求相关数据发送到请求数据分析接口,分析之后返回结果,再由openresty判断是否放行,到目前为止立竿见影。

 

数据分析接口大概得思路就是:此时做一些限制已经没有用了(后端代码也无法更改),去推理人的行为,一个正常人要访问网站时会怎么操作,爬虫毕竟只是爬虫,没法跟人一样。

local http = require "resty.http"
local httpc = http.new()
local json = require("cjson")


local headers=ngx.req.get_headers()
local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr
local ua=headers["User-Agent"] or ''
local white_ua={"xxxx",} -- ua 白名单


local api_server="xxx:1234"
local topic_id = "xxxxx"

function req_fast_api()
    --return false 是异常请求,true是正常请求

    local data = {
        TopicId = "xxxxxxx",
        From = 1710086694000,
        To = 1717151565000,
        Query = '"remote_addr:\"' .. ip .. '\""',
        Limit = 100
    }

    local jsonStr = json.encode(data)

    local resp, err = httpc:request_uri("http://" .. api_server .. "/xxx/xxx/xxxx", {
        method = "POST",
        body = jsonStr,
        headers = {
            ["Content-Type"] = "application/json",
        },
    })

    if not resp then
        ngx.log(ngx.ERR, "cls 日志接口挂了。")
        return 500, "true"
    end

    return resp.status, resp.body
end


function main()
    -- 校验ua是否在白名单中
    local outer_i
    for i, v in ipairs(white_ua) do
        if string.find(ua, v) then
            break
        else
            outer_i = i
        end
    end

    if outer_i == #white_ua then
        -- ua不在白名单中
        ngx.header["Server"] = "xxxxx/xxx"
        local status, body = req_fast_api()
        ngx.log(ngx.ERR, ip .. "日志接口返回:" .. body .. ",且ua不在白名单中。")
        if body == "false" then
            ngx.status = ngx.HTTP_BAD_REQUEST
            ngx.say("xxxx")
            ngx.exit(ngx.HTTP_BAD_REQUEST)
        end
    end
end

main()

 

 

如果这个方式不行,后面会继续更新,大概方法分享给深受爬虫摧残的运维小伙伴们。

标签:req,遇到,ua,xxx,爬虫,local,limit,ngx
From: https://www.cnblogs.com/bill2014/p/18228500

相关文章

  • DVWA靶场---csrf遇到的问题解决方法
    1.解决low等级不携带cookie访问诈骗网站:设置---隐私与安全---浏览器隐私---增强型跟踪保护---自定义---cookie---跨站跟踪型cookie。2.解决medium等级referer显示不完整解决方法:在服务器的html上加一段:<metaname="referrer"content="no-referrer-when-downgrade">当从......
  • 06.爬虫---urllib与requests请求实战(POST)
    06.urllib与requests请求实战POST1.Urllib模块2.Requests模块3.实战(Requests)POST请求Python中的POST请求是HTTP协议中的一种请求方法,用于向服务器提交数据。与GET请求不同,POST请求将数据封装在请求体中,而不是在URL中传递。通常情况下,POST请求用于向服务器提交表单......
  • uniapp开发APP遇到的问题
    图标变成了undefined原因:设置prefix时,在非nvue环境下,需u-input才有效。//旧版<u--inputplaceholder="请输入用户名"type="text"> <templateslot="prefix"> <viewclass="solts"> <viewstyle="padding-top:6upx&qu......
  • 【Python爬虫--scrapy+selenium框架】超详细的Python爬虫scrapy+selenium框架学习笔记
    六,selenium想要下载PDF或者md格式的笔记请点击以下链接获取python爬虫学习笔记点击我获取Scrapy+selenium详细学习笔记点我获取Python超详细的学习笔记共21万字点我获取1,下载配置##安装:pipinstallselenium##它与其他库不同的地方是他要启动你电脑上的浏览器......
  • feapder框架爬虫实战
    #-*-coding:utf-8-*-"""Createdon2024-05-3110:21:56---------@summary:---------@author:me"""importjsonfromfeapder.db.mysqldbimportMysqlDBimportfeapder"""#MYSQLMYSQL_IP="127.0.0.1"MYSQL_PO......
  • 适用于linux的bilibiliB站直播间弹幕爬虫脚本
    适用于linux的bilibiliB站直播间弹幕爬虫脚本,命令行运行之,输入到命令行,部分内容参考自网络,代码底部可见原始代码出处BUFF:然而,经测试,每次爬只能读取10条弹幕记录,这就使得在(sleeptime*10)(每秒)<弹幕新增量(每秒)时出现弹幕丢失的情况,此时需要调短sleeptime,由于本脚本是......
  • telnet HTTP测试步骤、遇到的问题和解决方法(cmd窗口)
    **本篇文章食用的简单说明**本篇文章为使用cmd窗口进行telnetHTTP测试步骤以及遇到的问题和解决方法。其中在解决方法中有文字版和图片版,文字版图片版自己选择一种查看就好(有标注)。目录点击想要查看的部分即可跳转到对应位置。目录**本篇文章食用的简单说明**---------......
  • 基于BeautifulSoup实现pubmed文献摘要的爬虫与无格式输出
    一、实现背景        为了满足项目数据集的构造,我们需要针对各领域医学文献的摘要进行爬取工作,因此编写了pubmed的文献摘要爬虫代码。代码基于python语言,可使用pycharm直接运行,同时基于BeautifulSoup库实现了解析HTML,为了获取纯文本内容,输出结果是以各个文献在pubmed......
  • 【爬虫软件】关键词批量采集小红书笔记正文工具
    一、背景介绍1.1爬取目标熟悉我的小伙伴都了解,我之前开发过2款软件:【xhs爬虫软件】用Python开发的小红书关键词搜索批量采集工具【爬虫软件】用Python开发的小红书详情批量采集工具,含笔记正文、转评赞藏等现在介绍的这个软件,相当于以上2个软件的结合版,即根据关键词爬取笔......
  • 【如何用爬虫玩转石墨文档?】
    ......