begin process at 2010 03 19 23:19:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Scripts

 > ANTIFLOOD SIMPLE ... MAIS PUISSANT

ANTIFLOOD SIMPLE ... MAIS PUISSANT


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Scripts Niveau :Débutant Date de création :23/11/2004 Date de mise à jour :23/11/2004 03:08:21 Vu :6 313

Auteur : Melnofil

Ecrire un message privé
Site perso
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

Explica tions 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 :

 Sources du même auteur

Source avec Zip CRYPTAGE AVEC MOTS DE PASSE
LA DISTANCE LEVENSHTEIN VS LES FAUTES DE FRAPPE
INSTALLEUR / INSTALLATION AUTOMATIQUE
Source avec Zip TUTORIAL SUR LES VARIABLES BINAIRES : LES BINVAR
JOINDRE UN CHANNEL DANS LE BON SERVER (ET S'Y CONNECTER SI B...

 Sources de la même categorie

Source avec une capture TORRENT VIEWER par kamikaze97441
Source avec Zip Source avec une capture PANNEAU DE CONFIGURATION PS7 par aliassangelius
LA CONFIGURATION D'UN EGGDROP QUI ENLÈVE LES BANS APRÈS X ... par Atok
Source avec Zip Source avec une capture DARKPROJECT - SCRIPT MIRC par Artwerks
Source avec une capture STATISTIQUES DISQUE(S) DUR(S) par Nort0n

Commentaires et avis

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.

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.

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)

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...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales