大数据-玩转数据-Flink恶意登录监控

news2024/12/25 23:58:41

一、恶意登录

对于网站而言,用户登录并不是频繁的业务操作。如果一个用户短时间内频繁登录失败,就有可能是出现了程序的恶意攻击,比如密码暴力破解。
因此我们考虑,应该对用户的登录失败动作进行统计,具体来说,如果同一用户(可以是不同IP)在2秒之内连续两次登录失败,就认为存在恶意登录的风险,输出相关的信息进行报警提示。这是电商网站、也是几乎所有网站风控的基本一环。

二、数据源格式

937166,1715,beijing,beijing,1511661606
937166,1715,beijing,beijing,1511661607
937166,1715,beijing,beijing,1511661608
161501,36156,jiangsu,nanjing,1511661608
937166,1715,beijing,beijing,1511661609
937166,1715,beijing,beijing,1511661610
937166,1715,beijing,beijing,1511661611
937166,1715,beijing,beijing,1511661612

三、封装数据

package com.lyh.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginEvent {
        private Long userId;
        private String ip;
        private String eventType;
        private Long eventTime;
}

四、代码实现逻辑

实现逻辑:
统计连续失败的次数:

  1. 把失败的时间戳放入到List中,
  2. 当List中的长度到达2的时候, 判断这个两个时间戳的差是否小于等于2s
  3. 如果是, 则这个用户在恶意登录
  4. 否则不是, 然后删除List的第一个元素
  5. 用于保持List的长度为2
  6. 如果出现成功, 则需要清空List集合

五、代码实现

package com.lyh.flink11;

import com.lyh.bean.LoginEvent;
import org.apache.flink.api.common.eventtime.SerializableTimestampAssigner;
import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.cep.CEP;
import org.apache.flink.cep.PatternSelectFunction;
import org.apache.flink.cep.PatternStream;
import org.apache.flink.cep.pattern.Pattern;
import org.apache.flink.cep.pattern.conditions.SimpleCondition;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;


import java.time.Duration;
import java.util.List;
import java.util.Map;

public class Login_ey {
    public static void main(String[] args) throws Exception {
        //创建流环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(2);
        //创建水印策略
        WatermarkStrategy<LoginEvent> wms = WatermarkStrategy.
                <LoginEvent>forBoundedOutOfOrderness(Duration.ofSeconds(20))
                .withTimestampAssigner(new SerializableTimestampAssigner<LoginEvent>() {
                    @Override
                    public long extractTimestamp(LoginEvent element, long recordTimestamp) {
                        return element.getEventTime();
                    }
                });
        //读入数据
        KeyedStream<LoginEvent, Long> watersencerStream = env.readTextFile("input/LoginLog.csv")
                .map(line -> {
                    String[] datas = line.split(",");
                    return new LoginEvent(Long.valueOf(datas[0]),
                            datas[1],
                            datas[2],
                            Long.valueOf(datas[3]));
                    // 指定水印和时间戳
                }).assignTimestampsAndWatermarks(wms)
                // 按照用户ID分组
                .keyBy(LoginEvent::getUserId);
        // Flink CEP 也叫做Flink复杂事件处理,
               // 可以在无穷无界的事件流中检测事件规则,通过模式规则匹配的方式对重要信息进行跟踪和分析,从而在实时数据中发掘出有价值的信息
        //定义模式
        Pattern<LoginEvent, LoginEvent> fail = Pattern.
                <LoginEvent>begin("fail")
                .where(new SimpleCondition<LoginEvent>() {
                    @Override
                    public boolean filter(LoginEvent value) throws Exception {
                        return "fail".equals(value.getEventType());
                    }
                }).timesOrMore(2).consecutive()
                .until(new SimpleCondition<LoginEvent>() {
                    @Override
                    public boolean filter(LoginEvent value) throws Exception {
                        return "success".equals(value.getEventType());
                    }
                }).within(Time.seconds(2));
        // 把模式用在流上
        PatternStream<LoginEvent> ps = CEP.pattern(watersencerStream, fail);
        //获取匹配到的结果
        ps.select(new PatternSelectFunction<LoginEvent, String>() {
            @Override
            public String select(Map<String, List<LoginEvent>> pattern) throws Exception {
                return pattern.get("fail").toString();
            }
        }).print();
        env.execute();


    }
}

六、测试结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批量获取CSDN文章对文章质量分进行检测,有助于优化文章质量

&#x1f4da;目录 ⚙️简介✨分析获取步骤⛳获取文章列表☘️前期准备✨ 接口解析⚡️ 获取文章的接口 ☄️文章质量分接口⭐接口分析 ⌛代码实现&#xff1a;⚓核心代码:⛵测试用例:⛴ 运行效果:☘️增加Excel导出 ✍️结束 ⚙️简介 有时候我们写文章是为了记录当下遇到的bu…

乙方策划人员的内心独白:写不完的案子,是工作的常态吗?

在某种程度上来说&#xff0c;这是对的。 如果是年轻人来说&#xff0c;在甲方当策划就是当执行&#xff0c;只有积累一定经验才能真正实行策划任务、 而在乙方做策划那就是纯纯的策划&#xff0c;也就是你说的每天写不完的案子。 对于普通人的职场选择往往是就近选择&#…

服务治理平台:SOA与微服务架构的对比与区别

文章目录 1、场景引入2、面向服务的架构SOA3、微服务架构4、对比与联系5、服务治理平台 1、场景引入 如果我们打开支付宝首页&#xff0c;去看我们的余额&#xff0c;它会展示你的总资产&#xff0c;昨日收益、累计收益等信息。假如这个页面所展示的信息&#xff0c;都来自各个…

非常详细的trunk-based分支管理流程配置及使用

非常详细的trunk-based分支管理流程配置及使用。 目前业界主流的版本管理流程是Gitflow 和 trunk-based。 Gitflow流行的比较早。但是目前的流行度要低于 trunk-based模式工作流。trunk-based模式被誉为是现代化持续集成的最佳实践。 他俩的核心区别是,Gitflow是一个更严格…

格式化文件恢复软件有哪些 格式化文件恢复软件怎么用

格式化是指对磁盘或者磁盘中的分区进行初始化的一种操作&#xff0c;但是这种操作会造成磁盘内数据的清除。因此&#xff0c;当我们需要恢复一些数据时&#xff0c;就要借助相关数据恢复软件的帮助&#xff0c;那么下面就来给大家介绍格式化文件恢复软件有哪些&#xff0c;格式…

ORB-SLAM2_RGBD_DENSE_MAP编译、问题解决、离线加载TUM数据和在线加载D435i相机数据生成稠密地图

文章目录 0 引言1 安装依赖1.1 其他库安装1.2 pcl库安装 2 编译ORB-SLAM2_RGBD_DENSE_MAP2.1 build.sh2.2 build_ros.sh 3 运行ORB-SLAM2_RGBD_DENSE_MAP3.1 build.sh编译版本3.2 build_ros.sh编译版本 0 引言 ORB-SLAM2_RGBD_DENSE_MAP是基于ORB-SLAM2框架的一种RGB-D稠密地图…

【C++】LeetCode 160 相交链表

今天再写一道算法题&#xff08;这两周都写算法题有点摆烂&#xff09; 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1…

第17篇ESP32 platformio_arduino框架 AP热点与AP+STA同时存在模式

笔记本连接ESP32后&#xff0c;串口打印连接状态&#xff1a; 第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit…

影楼管理系统软件erp如何通过快解析发布到外网登录访问

影楼管理系统也叫影楼ERP软件&#xff0c;即影楼信息化管理系统&#xff0c;通常集成了选片、影楼流程管理、婚纱礼服、影楼财务、影楼客服、影楼接单等多功能为一身的影楼app管理。通过影楼管理系统把客户关系管理理念引入影楼管理&#xff0c;有序而全面的建立客户资料库&…

【9】openGL调用imGUI使用其自带例子测试

参考视频 去github下载imgui源码&#xff0c;得到 将根目录下所有.h .cpp文件复制到你的项目文件夹imgui下面。 进入exmaple文件夹&#xff0c;可以看到例子 这是它调用的头文件 在backends里找到你需要的 .h .cpp文件&#xff0c;总共四个文件&#xff0c;复制过来 你的项…

使用阿里云无影云电脑能干什么?

阿里云无影云电脑是一种易用、安全、高效的云上桌面服务&#xff0c;阿里云无影云电脑可用于高数据安全管控、高性能计算等要求的金融、设计、视频、教育等领域&#xff0c;适用于多种办公场景&#xff0c;如远程办公、多分支机构、安全OA、短期使用、专业制图等。阿里云百科来…

Java基于微信小程序的电影交流平台

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章&#xff1a;简介第二章、开发环境&#xff1a;后端&#xff1a;前端&#xff1a;数据库&…

阿里云无影云电脑介绍_云办公_使用_价格和优势说明

什么是阿里云无影云电脑&#xff1f;无影云电脑&#xff08;原云桌面&#xff09;是一种快速构建、高效管理桌面办公环境&#xff0c;无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景&#xff0c;阿里云百科分享无影云桌面的详细介绍、租用价格、…

Android Media3 ExoPlayer 开启缓存功能

ExoPlayer 开启播放缓存功能&#xff0c;在下次加载已经播放过的网络资源的时候&#xff0c;可以直接从本地缓存加载&#xff0c;实现为用户节省流量和提升加载效率的作用。 方法一&#xff1a;采用 ExoPlayer 缓存策略 第 1 步&#xff1a;实现 Exoplayer 参考 Exoplayer 官…

Docker 部署 Bitwarden RS 服务

Bitwarden RS 服务是官方 Bitwarden server API 的 Rust 重构版。因为 Bitwarden RS 必须要通过 https 才能访问, 所以在开始下面的步骤之前, 建议先参考 《Ubuntu Nginx 配置 SSL 证书》 配置好域名和 https 访问。 部署 Bitwarden RS 拉取最新版本的 docker.io/vaultwarden…

快递、外卖、网购自动定位及模糊检索收/发件地址功能实现

概述 目前快递、外卖、团购、网购等行业 &#xff1a;为了简化用户在收发件地址填写时的体验感&#xff0c;使用辅助定位及模糊地址检索来丰富用户的体验 本次demo分享给大家&#xff1b;让大家理解辅助定位及模糊地址检索的功能实现过程&#xff0c;以及开发出自己理想的作品…

【Java】应用层协议HTTP和HTTPS

HTTP和HTTPS协议 HTTPHTTP协议的工作过程HTTP协议格式抓包工具抓包结果 HTTP请求(Request)URL方法GET方法POST请求其他方法 报头(header)HostContent-lengthContent-TypeUser-AgentRefererCookie 正文(body) HTTP响应HTTP状态码响应报头(header)响应正文(body) 通过form表单构造…

【RocketMQ】(四)消息的拉取

在上一讲中&#xff0c;介绍了消息的存储&#xff0c;生产者向Broker发送消息之后&#xff0c;数据会写入到CommitLog中&#xff0c;这一讲&#xff0c;就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位&#xff0c;有两种消费模式&#xff1a; 广播…

c++拷贝对象时的优化问题

博主是基于VS2019测试的&#xff0c;不同编译器可能情况不一样。示例分析只有传值传参传值返回一道例题 博主是基于VS2019测试的&#xff0c;不同编译器可能情况不一样。 看下面这一个类A&#xff1a; class A { public:A(int a 0):_a(a){cout << "A(int a 0)&q…

通过stream流实现分页、模糊搜索、按列过滤功能

通过stream实现分页、模糊搜索、按列过滤功能 背景逻辑展示示例代码 背景 在有一些数据通过数据库查询出来后&#xff0c;需要经过一定的逻辑处理才进行前端展示&#xff0c;这时候需要在程序中进行相应的分页、模糊搜索、按列过滤了。这些功能通过普通的逻辑处理可能较为繁琐…