Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANTIFLOOD SIMPLE ... MAIS PUISSANT


Information sur la source

Catégorie :Scripts Niveau : Débutant Date de création : 23/11/2004 Date de mise à jour : 23/11/2004 03:08:21 Vu : 5 025

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Il s'agit ici d'une base d'antiflood (le noyau quoi) permettant d'être utilisée très facilement n'importe où. C'est à dire que vous pouvez à la fois vous en servir pour vous et pour votre bot fait en socket.

>> Ce script est fait uniquement en hash tables et surtout sans aucuns timers !

Sommaire :
En haut : Des explications théoriques bien rébarbatives.
Au milieu : Le code source (2 aliases de 12 lignes en tout) suivit d'un exemple d'utilisation.
En bas : Aide sur les deux fonctions.

Prenons un anti-flood au hazard et reglons le sur 5 messages toutes les 10 secondes maximum, maintenant à l'aide d'un script effectuons la manipulation suivante :

A t=0 : on envois 1 message => l'anti-flood demarre un timer, il me reste 9 message max.
A t=4,5~4,9 : on envois 9 messages => plus que 0 message ! Je passe tout juste.
A t=5 : le timer s'arrête, j'ai envoyé 10 messages ; je suis sous la barre donc l'anti-flood me supprime de sa base de données.
A t=5,1~5,5 : on envois 10 messages (l'anti-flood démarre un nouveau timer : il me reste 0 message, c'est juste mais ca passe)

Vous constaterez que bien qu'ayant envoyé pas moins de 19 messages en 1 seule seconde la majorité des anti-flood vous laissent passer. D'où tout l'interêt de mémoriser la date d'apparition de chaque message de chaque utilisateur (dans la limite du temps imparti : 10 secondes).

Recommandations d'usages :

Ne faites pas plusieurs tables de hachages si vous utilisez ce script de plusieurs façons à la fois ! En effet vu la facon dont celles-ci fonctionnent, ce genre d'utilisation est leur spécialité, vous pouvez la grossir autant que vous voulez sans ralentir le script. Augmentez juste en conséquance l'intervalle possible de clé (Que j'ai appelé <taille htable> et qui est utilisé dans hmake) et pensez aussi a maintenir des identifiant <ident> différent d'une version à l'autre pour éviter les collisions. Pour obtenir des identifiants différents à coup sûr, vous pouvez précéder chaque occurance d'une lettre unique "p" pour votre antiflood perso, "b" pour celui du bot, etc.

Je n'ai pas vérifié mais il me semble que vous pouvez modifier les paramêtres <nbr msg> et <secs> en cours de route sans (trop de :p) dégâts (vérifiez par vous-même avant si vous comptez modifier fréquement ces paramêtres).
 

Source

  • ; Voici le code source :
  • antiflood.ontext {
  • if $0 < 6 { echo 4 -s * Erreur : "/antiflood.ontext <ident> <nbr msg> <secs> <nom htable> <taille htable> <fct onflood>" utilisée avec : $1- | halt }
  • if (!$hget($4)) .hmake $4-5
  • var %ctime $ctime, %data $hget($4,$1), %dern $gettok(%data $+ ,$calc($2 - 1),32)
  • if (%dern == $null) { hadd -u $+ $3 $4 $1 %ctime %data }
  • elseif ($calc(%dern + $3 - %ctime) <= 0) { hadd -u $+ $3 $4 $1 %ctime $gettok(%data $+ ,1- $+ $calc($2 - 2),32) }
  • else { $6- }
  • }
  • antiflood.onnick {
  • if $0 != 4 { echo 4 -s * Erreur : "/antiflood.onnick <ident> <newident> <secs> <nom htable>" utilisée avec : $1- | halt }
  • if ($hget($4)) && ($hget($4,$1)) { hadd -u $+ $3-4 $2 $ifmatch | hdel $4 $1 }
  • }
  • ; Voici l'exemple :
  • on *:text:*:#:/antiflood.ontext $nick $+ @ $+ $cid $+ # 5 3 antiflood 10 kick # $nick Pas de flood !
  • on *:nick:{
  • var %i $comchan(nick,0)
  • while (%i > 0) {
  • antiflood.onnick $nick $+ @ $+ $cid $+ $comchan($nick, $+ %i) $newnick $+ @ $+ $cid $+ $comchan($nick, $+ %i) 3 antiflood
  • dec %i
  • } }
; Voici le code source :
antiflood.ontext {
 if $0 < 6 { echo 4 -s * Erreur : "/antiflood.ontext <ident> <nbr msg> <secs> <nom htable> <taille htable> <fct onflood>" utilisée avec : $1- | halt }
 if (!$hget($4)) .hmake $4-5
 var %ctime $ctime, %data $hget($4,$1), %dern $gettok(%data $+ ,$calc($2 - 1),32)
 if (%dern == $null) { hadd -u $+ $3 $4 $1 %ctime %data }
 elseif ($calc(%dern + $3 - %ctime) <= 0) { hadd -u $+ $3 $4 $1 %ctime $gettok(%data $+ ,1- $+ $calc($2 - 2),32) }
 else { $6- }
}
antiflood.onnick {
 if $0 != 4 { echo 4 -s * Erreur : "/antiflood.onnick <ident> <newident> <secs> <nom htable>" utilisée avec : $1- | halt }
 if ($hget($4)) && ($hget($4,$1)) { hadd -u $+ $3-4 $2 $ifmatch | hdel $4 $1 }
}


; Voici l'exemple :
on *:text:*:#:/antiflood.ontext $nick $+ @ $+ $cid $+ # 5 3 antiflood 10 kick # $nick Pas de flood !
on *:nick:{
 var %i $comchan(nick,0)
 while (%i > 0) {
   antiflood.onnick $nick $+ @ $+ $cid $+ $comchan($nick, $+ %i) $newnick $+ @ $+ $cid $+ $comchan($nick, $+ %i) 3 antiflood
   dec %i
} }

Conclusion

Remarque - Vous pouvez obtenir de l'aide sur les deux fonctions utilisées en les tapant sans paramêtre :
/antiflood.ontext
/antiflood.onnick

Explications concernant l'exemple :
Etant donné que notre exemple traite chaque canal à part, il est nécessaire que le "onnick" s'applique à chaque canal que vous avez en commun avec la personne. Notez que l'on utilise $cid pour éviter le cas où vous auriez le même server/canal ouvert par deux connections (ou plus).

Décomposition des paramêtres dans la fonction /antiflood.ontext :
<ident> = $nick $+ @ $+ $cid $+ # ; Ceci permet que le script traite chaque canal et chaque network différament (cf. explications)
<nbr msg> = 5 ; Nombre de message que l'on peut dire ....
<secs> = 3 ; .... sur le nombre de secondes.
<nom htable> = antiflood
<taille htable> = 10 ; cf. Dans l'aide à "hash table", c'est le N de hmake
<fct onflood> = kick # $nick Pas de flood ! ; commande à executer en cas de flood, pensez à mettre un alias perso pour faire plusieurs commandes.

Décomposition des paramêtres dans la fonction /antiflood.onnick :
<ident> = $nick $+ @ $+ $cid $+ $comchan($nick, $+ %i) ; ancien identifiant de la personne pour chaque canal
<newident> = $newnick $+ @ $+ $cid $+ $comchan($nick, $+ %i) ; nouvel identifiant de la personne la aussi pour chaque canal
<secs> = 3 ; idem que tout a l'heure
<nom htable> = antiflood ; idem que tout a l'heure

Note de fin : Notez que ce script peut s'utiliser pour contrôler la fréquence de n'importe quel système de flux de donnée si l'intégrité ou/et l'ordre ne sont pas importants (on peut en effet à la place du kick mettre un système de timer qui relance la commande un peu plus tard).
 

Historique

23 novembre 2004 03:08:22 :

Commentaires et avis

signaler à un administrateur
Commentaire de Frecky le 25/11/2004 15:18:55

J'espere que ta pas oublier la queue list ?!
Si tu en n'utiluse pas, tu va Excess Flooder c'est sur quand y va avoir un vrai flood.

signaler à un administrateur
Commentaire de Melnofil le 30/11/2004 15:25:13

C'est pas un script pour s'empecher soit-même de flooder c un script pour réagir aux flood des autres personnes du channal.
Tiens a propos j'ai fait un système d'anti-flood personnel comme tu dis pour un bot si ca peut interesser des gens je peut le poster.

signaler à un administrateur
Commentaire de lebaronrouge le 19/11/2005 02:36:22

oui ca m'interesse car j'ai un bot mirc qui fait office de barman avec toute une liste de commandes pour servir les users selon ce qu'ils tapent sur le canal et le barman leurs sert , le probleme c'est que je galere un peu a faire en sorte que mon barman ne parte pas en excess flood car il gere aussi la moderation de mon chan ( antiflood antii pub anti insulte auto voice etc)

signaler à un administrateur
Commentaire de lebaronrouge le 19/09/2006 02:31:59

Il serait interessant de pouvoir activer les fonctions en cascade , a savoir : si X avertissements = kick , et si X kicks = kickban X durée

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.