that is very extensive information thankyou. i didnt know about the Ipv6 format , i will use it. my brains can handle at most / max the dynamic predicates stuff. indeed a score is needed and a time stamp. I made a very simple code here.
:- dynamic ip_behaviour/7.
judge_interval( Time_difference , do_block_ip ) :- Time_difference < 0.3 , ! .
judge_interval( _Time_difference , do_allow_ip ) :- ! .
allow_ip_request( ip( Nu1, Nu2, Nu3, Nu4 ) , do_block_ip ):-
% it was already asserted as to block it
ip_behaviour( Nu1, Nu2, Nu3, Nu4 , _Last_time , _Time_difference , Judgement ) ,
Judgement == do_block_ip , ! .
allow_ip_request( ip( Nu1, Nu2, Nu3, Nu4 ) , Judgement ):-
retract( ip_behaviour( Nu1, Nu2, Nu3, Nu4 , Previous_time , _Previous_interval , _Allow_or_block ) ) ,
get_time( Now ), Xinterval is Now - Previous_time ,
judge_interval( Time_difference , Judgement , ) ,
assert( ip_behaviour( Nu1, Nu2, Nu3, Nu4 , Now , Xinterval , Judgement ) ) .
allow_ip_request( ip( Nu1, Nu2, Nu3, Nu4 ) , do_allow_ip ):- !,
% the ip is new / has never been encountered yet , so assert it
get_time( Now ),
assert( ip_behaviour( Nu1, Nu2, Nu3, Nu4 , Now , 5 , do_allow_ip ) ) .