我想检测一个简单的蛮力攻击,其中一次失败的登录尝试之后是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));
在进行模式匹配之后,下一次传入的失败登录也会触发一个模式匹配,但是我希望重新启动模式检测。我可以在我的模式中使用“比赛结束后开始比赛”吗?