kk-anti-reptile 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
kk-anti-reptile 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
kk-anti-reptile 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
kk-anti-reptile 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
kk-anti-reptile 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件。

系统要求

  • 基于spring-boot开发(spring-boot1.x, spring-boot2.x均可)
  • 需要使用redis

工作流程

kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Filter,并注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servlet容器中,从而实现对请求的过滤

在kk-anti-reptile的过滤Filter内部,又通过责任链模式,将各种不同的过滤规则织入,并提供抽象接口,可由调用方进行规则扩展

Filter调用则链进行请求过滤,如过滤不通过,则拦截请求,返回状态码509,并输出验证码输入页面,输出验证码正确后,调用过滤规则链对规则进行重置

目前规则链中有如下两个规则

ip-rule

ip-rule通过时间窗口统计当前时间窗口内请求数,小于规定的最大请求数则可通过,否则不通过。时间窗口、最大请求数、ip白名单等均可配置

ua-rule

ua-rule通过判断请求携带的User-Agent,得到操作系统、设备信息、浏览器信息等,可配置各种维度对请求进行过滤

命中规则后

命中爬虫和防盗刷规则后,会阻断请求,并生成接除阻断的验证码,验证码有多种组合方式,如果客户端可以正确输入验证码,则可以继续访问

验证码有中文、英文字母+数字、简单算术三种形式,每种形式又有静态图片和GIF动图两种图片格式,即目前共有如下六种,所有类型的验证码会随机出现,目前技术手段识别难度极高,可有效阻止防止爬虫大规模爬取数据

接入使用

后端接入非常简单,只需要引用kk-anti-reptile的maven依赖,并配置启用kk-anti-reptile即可
加入maven依赖

<dependency>
    <groupId>cn.keking.project</groupId>
    <artifactId>kk-anti-reptile</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

配置启用 kk-anti-reptile

anti.reptile.manager.enabled=true

前端需要在统一发送请求的ajax处加入拦截,拦截到请求返回状态码509后弹出一个新页面,并把响应内容转出到页面中,然后向页面中传入后端接口baseUrl参数即可,以使用axios请求为例:

import axios from 'axios';
import {baseUrl} from './config';

axios.interceptors.response.use(
  data => {
    return data;
  },
  error => {
    if (error.response.status === 509) {
      let html = error.response.data;
      let verifyWindow = window.open("","_blank","height=400,width=560");
      verifyWindow.document.write(html);
      verifyWindow.document.getElementById("baseUrl").value = baseUrl;
    }
  }
);

export default axios;

注意

  1. apollo-client需启用bootstrap

使用apollo配置中心的用户,由于组件内部用到@ConditionalOnProperty,要在application.properties/bootstrap.properties中加入如下样例配置,(apollo-client需要0.10.0及以上版本)详见apollo bootstrap说明

apollo.bootstrap.enabled = true
  1. 需要有Redisson连接

如果项目中有用到Redisson,kk-anti-reptile会自动获取RedissonClient实例对象; 如果没用到,需要在配置文件加入如下Redisson连接相关配置

spring.redisson.address=redis://192.168.1.204:6379
spring.redisson.password=xxx

配置一览表

在spring-boot中,所有配置在配置文件都会有自动提示和说明,如下图
配置自动提示及说明
所有配置都以anti.reptile.manager为前缀,如下为所有配置项及说明

NAME 描述 默认值 示例
enabled 是否启用反爬虫插件 true true
include-urls 需要反爬的接口列表,以'/'开头,以','分隔 /client,/user
ip-rule.enabled 是否启用IP Rule true true
ip-rule.expiration-time 时间窗口长度(ms) 5000 5000
ip-rule.request-max-size 单个时间窗口内,最大请求数 20 20
ip-rule.ignore-ip IP白名单,支持后缀'*'通配,以','分隔 192.168.*,127.0.0.1
ua-rule.enabled 是否启用User-Agent Rule true true
ua-rule.allowed-linux 是否允许Linux系统访问 false false
ua-rule.allowed-mobile 是否允许移动端设备访问 true true
ua-rule.allowed-pc 是否允许移PC设备访问 true true
ua-rule.allowed-iot 是否允许物联网设备访问 false false
ua-rule.allowed-proxy 是否允许代理访问 false false
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (3)

加载中
依赖不上
2020/05/13 10:59
回复
举报
凯京技术团队上海凯京信达科技集团有限公司软件作者
根据使用者反馈,已经新增了全局拦截模式的可选支持了,欢迎大家使用反馈,我们会不断优化改进
2020/01/11 13:16
回复
举报
赞👍
2020/01/10 20:48
回复
举报
更多评论
发表了资讯
2020/02/11 11:48

kk-anti-reptile 1.0.0-RELEASE 版本发布,反爬虫组件

1.0.0-RELEASE版本发布内容 优化:验证及刷新请求不使用Filter处理,改为使用原生servlet,不影响正常请求效率 优化:底层拦截原理改进,由filter改成spring体系的Interceptor,方便后续Spring mvc对接支持 新增:新增全局拦截模式可选,默认为非全局拦截 新增:新增拦截模式配置不当时智能提示 新增:新增 @AntiReptile 注解标注接口拦截支持,注解和配置文件方式可同时作用 新增:新增接口正则表达式匹配拦截支持 kk-anti-re...

0
13
发表了资讯
2020/01/06 11:58

反爬虫防盗刷 Spring Boot 组件 kk-anti-reptile 初版发布

kk-anti-reptile 是适用于基于spring-boot开发的分布式系统的反爬虫组件 系统要求 基于spring-boot开发(spring-boot1.x, spring-boot2.x均可) 需要使用redis 工作流程 kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Filter,并注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servlet容器中,从而实现对请求的过滤 在kk-anti-reptile的过滤Filter内...

10
141
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/01/10 13:18

反爬虫、接口防盗刷 spring boot stater 组件 kk-anti-reptile

kk-anti-reptile是,适用于基于spring-boot开发的分布式系统的反爬虫组件。 系统要求 基于spring-boot开发(spring-boot1.x, spring-boot2.x均可) 需要使用redis 工作流程 kk-anti-reptile使用基于Servlet规范的的Filter对请求进行过滤,在其内部通过spring-boot的扩展点机制,实例化一个Filter,并注入到Spring容器FilterRegistrationBean中,通过Spring注入到Servlet容器中,从而实现对请求的过滤 在kk-anti-reptile的过滤Fil...

0
0
发表了博客
2019/06/07 14:34

LKM rootkit:Reptile学习

简介 Reptile是github上一个很火的linux lkm rootkit,最近学习了一些linux rootkit的内容,在这里记录一下。 主要是分析reptile的实现 Reptile的使用 安装命令: sudo ./setup.sh install 然后执行下面的命令 /reptile/reptile_cmd show 接着就可以看到/reptile目录下的一些东西了,这是项目安装在系统中的一些文件,在安装完成后,默认是隐藏的。具体的执行命令就不再这里赘述了 会出现下面这些程序 Reptile原理分析 Reptile使...

0
0
2020/12/24 00:08

1969: KK的罗汉

1969: KK的罗汉 1.描述 KK喜欢玩叠罗汉,叠罗汉就是一个小朋友压一个小朋友; 现在有N个小朋友按体型从小到大排列; 规定:只有体型相邻的才能压而且只能是体型大的压体型小的。 例如: 假设有3个小朋友,他们的体重从小到大排序后为1,2,3。那么2能压1,3能压2,但3不能压1; 不巧KK是体型最小的一个,除了他每个人都想压住别人,但每个人都不想被压,假设每个人都足够聪明; 输入 输入有多组,每组有一个正整数N,表示有N个小...

0
0
发表了博客
2019/11/14 17:46

【Meta learning】Reptile: a Scalable Metalearning Algorithm

论文信息:   Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018. 摘要   文章从一个任务分布中抽取许多任务来训练元学习模型,使其可以更快的学习这个分布中未遇到的任务。   仅在元学习更新过程中仅使用一阶微分,就能得到在新任务上实现快速微调的参数初始化。   这里介绍两种算法:扩展FOMAML和Reptile。First-order MAML是一阶MAML,忽略了二阶导数得到MAML的近似值;Reptile...

0
0
发表了博客
2019/11/07 22:25

【笔记】Reptile-一阶元学习算法

[TOC] 论文信息 Nichol A , Achiam J , Schulman J . On First-Order Meta-Learning Algorithms[J]. 2018. 一、摘要 本文主要考虑元学习问题,即存在一个任务分布(a distribution of tasks),从这个分布中抽取许多任务来训练元学习模型(或代理),使其在处理从这个分布中抽取的以前从未遇到过的任务时能更快的学习(即表现得更好)。 本文通过分析一系列仅在元学习更新(meta-learning update)过程中使用一阶微分(first-o...

0
0
发表于开发技能专区
2020/12/31 21:37

kk的2020年度报告

1.--前言 2.--成绩 3.--总结 4.--未来 5.--最喜欢的一段话 6.--最喜欢的历史人物 前言 19年因为想记录下工作中的问题,从问题到解决来积累经验,但后期大部分发现都是一些新知识点,或者新问题的demo记录,当然也因此积累了大量经验,那些经典问题到现在看来还是足够有分量的,到后期各社区的账号申请连载,有部分博主过来转载,以及参加云栖社区的活动,阿里巴巴的互动,都为自己增添了与大佬互动的机会。 成绩 根据年初定的目...

0
0
发表于大前端专区
2017/02/13 17:59

聪明的kk 动态规划 数塔

原文链接: 聪明的kk 动态规划 数塔 聪明的kk http://acm.nyist.net/JudgeOnline/problem.php?pid=171 时间限制:1000 ms | 内存限制:65535 KB 难度:3 输入 第一行:N M (1≤N M≤20 0≤Xij≤500(i=1,2„.N, j=1,2„,M) )表示沙漠是一个N*M的矩形区域 接下来有N行:每行有M个正整数,Xi1 Xi2 ……Xim 表示各位置中的虫子数(单个空格隔开) 假设“KK”只能向右走或向下走。 输出 输出有一个整数, 表示“KK”吃掉最多的虫子数。...

0
0
发表于云计算专区
2018/09/30 19:27

KK大叔讲如何赚钱-过滤

在读KK大叔写的过滤这一章节的部分内容时引起了自己的共鸣,KK大叔分别在开始章节分别说明了我们在过去,现在以及将来怎么在万千复杂的事物种选出我们需要的东西。 在过去我们我们在选择一样东西是不是我们需要的或者说是不是对我们有用的,我们选择大多都是靠自己以往的经验,这些以往的经验我们大多是从我们家庭,学校,或者更深一步从我们获取的知识中得到。然后根据这些经验进行告诉我们那些东西我们应该选择,那些应该抛弃...

0
0
发表了博客
2020/06/28 15:36

THE USB TRAIL: ANTI-FORENSICS AND ANTI-ANTI-FORENSICS BITTER ROMANCE翻译

THE USB TRAIL: ANTI-FORENSICS AND ANTI-ANTI-FORENSICS BITTER ROMANCE By Chidi Obumneme USB大容量存储设备由于其外形轻巧、具有能作为攻击任何团体或组织的工具的能力而越发流行。因此,以色列的Ben-Gurion大学的研究员们发现了29种可用来攻击和危害计算机hi系统的USB设备。同样地,the Insider Threat(内部威胁)是对团体和组织的极大安全隐患,这在很大程度上是因为它们有特权访问顶级敏感或专有信息。这些内部威胁可以...

0
0
发表了博客
2015/08/22 00:29

KK课表抓取教务系统

字符串数据解析 太难看 = = login_widget::login_widget(QWidget *parent) ://QWidget(parent), ui(new Ui::login_widget) {   ui->setupUi(this);   p = (MainWindow*)parent;   //loading = new loading_widget(this); #ifndef Q_OS_WIN32   FixScreen(); #endif   timer_timeout = new QTimer(this);   connect(timer_timeout, SIGNAL(timeout()), this, SLOT(slot_timer()));   manager = new QNetworkA...

0
4
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
3 评论
136 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部