如何在FlinkCEP中使用“赛后跳过策略”重新启动模式检测?

时间:2019-06-04 18:56:53

标签: flink-cep

我想检测一个简单的蛮力攻击,其中一次失败的登录尝试之后是10秒内来自同一源IP的四个失败的登录尝试。 这是我的代码:


Pattern<Event, LoginEvent> simpleBruteForceAttackPattern = Pattern.<Event>begin("start").subtype(LoginEvent.class)

            .where(new SimpleCondition<LoginEvent>() {
                @Override
                public boolean filter(LoginEvent loginEvent) {
                    return !loginEvent.isLoginSuccess();
                }
            })
            .followedBy("next").subtype(LoginEvent.class)
            .where(new IterativeCondition<LoginEvent>() {
                @Override
                public boolean filter(LoginEvent loginEvent, Context<LoginEvent> context) throws Exception {
                    if (loginEvent.isLoginSuccess())
                        return false;

                    String sourceIp = loginEvent.getSourceIp().getIpAdress();
                    String destinationIp = loginEvent.getDestinationIp().getIpAdress();

                    for (LoginEvent patternStartEvent : context.getEventsForPattern("start")) {
                        if (!sourceIp.equals(patternStartEvent.getSourceIp().getIpAdress())) {
                            return false;
                        }
                        if (!destinationIp.equals(patternStartEvent.getDestinationIp().getIpAdress()))
                            return false;
                    }
                    return true;
                }
            }).times(4).within(Time.seconds(10));


在进行模式匹配之后,下一次传入的失败登录也会触发一个模式匹配,但是我希望重新启动模式检测。我可以在我的模式中使用“比赛结束后开始比赛”吗?

0 个答案:

没有答案