Log connexions
#1
Bonjour,

J'avais pris un code TCL qui a été posté sur le Forum, et qu'il ne fonctionnait pas, alors j'ai du modifier quelque lignes dans le code pour le faire débuger. Le code sert à historiser les connexions entrantes sur le serveur IRC, et les enregistrer dans un fichier "connects.db", et j'aimerais ajouter une nouvelle fonctionnalité qui servira à retourer via l'adresse IP les pseudo qui ont été passés sous cette adresse, et vis-versa via un pseudo çà me retourne les adresse qui ont été utilisées par le pseudo en question.

Exemple:
Code :
<Good>!connect bob
<Bot>Connection de bob
<bot>pseudo : bob IP: 00.000.00.IP Date:01/02/03 à 13h03
<bot>pseudo : bob IP: 00.000.00.IP Date:01/02/03 à 14h03


sens contraire :


<Good>!connect 01.020.0301.IP
<Bot>Connection de 01.020.0301.IP
<bot> IP: 00.000.00.IP pseudo: bob1 Date:01/02/03 à 13h03
<bot> IP: 00.000.00.IP pseudo: bob09 Date:01/02/03 à 14h03

Voici le code que j'utilise:

TCL
#################
##  PUTQUICK  ##
###############
 
 
proc putquick {arg} {
 append arg "\n"
 putdccraw 0 [string length $arg] $arg
}
 
 
bind raw - NOTICE connexion
proc connexion {from key arg} {
global botnick notc mod
   set text [split $arg] 
   if {[join [lrange $text 2 5]] == "Notice -- Client connecting"} {
     set g_nick [lindex $text 9]
      set g_user [string range [lindex [split [lindex $text 10] "@"] 0] 1 end]
      set g_host [string range [lindex [split [lindex $text 10] "@"] 1] 0 end-1]
   set g_userhost "$g_nick!$g_user@$g_host"
   set connexion "$g_nick $g_host"
    putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"
   }
   set logfichier [open "connect.txt" "a+"]
   puts $logfichier "$connexion"
   close $logfichier
   }
   return 0
   }
}
 
bind pub - !connect connects
proc connects { nick uhost handle channel arg } {   
   putquick "NOTICE $nick :\0033..:Liste des connexions:.."
   catch {open "connect.txt" "r"} connexion
   set num 0
   while {![eof $connexion]} {
   gets $connexion verif
   if {$verif ne ""} {incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}
   }
   if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"; return 0
   catch {close $connexion}
}



Donc, je sais pas d'ou commencer pour ajouter cette fonction.
Merci de votre aide à l'avance.
Répondre Avertir
#2
En fait ce qui te manque, c'est le moyen de rechercher dans le fichier un pseudo ou une IP précise, c'est bien ça ?
Donc, il y a deux choses à faire:
1) modifier le format de ton fichier pour ajouter les informations manquantes (date ?)
2) modifier la procédure connects pour utiliser les arguments ($args) et ne faire d'affichage que si l'argument passé est dans la ligne
Répondre
#3
Bonjour,

J'ai effectué plusieurs tests, mais je ne comprends toujours pas comment faire, j'ai fait des recherches ailleurs mais pas grand monde serait me dire comment faire l'exemple que j'ai posté au début du poste, pourriez vous me faire un exemple ou avoir une aide plus précise.

Merci d'avance.
Cordialement.
Aristide
Répondre Avertir
#4
salut

TCL
if {$verif ne "" && [string match -nocase *$arg* $verif]} {incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}


ça devrais faire ce que tu veux.

par contre à la fin tu fermes le fichier après un "return" donc en réalité il ne se ferme pas
TCL
if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"; return 0
   catch {close $connexion}


à remplacer par
TCL
catch {close $connexion}
   if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"; return 0


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#5
j'oubliais l heure
TCL
set connexion "$g_nick $g_host"


à remplacer par
TCL
set connexion "$g_nick $g_host [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]"


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#6
Bonjour,

@djkenny: J'ai remplacé les lignes que tu avais précisé, mais j'ai toujours un message d'erreur en Party-Line

Code :
[16:11] Tcl error [connexion]: can't read "connexion": no such variable

Voici les modifications que j'ai apporté:

TCL
#################
##  PUTQUICK  ##
###############
 
 
proc putquick {arg} {
append arg "\n"
putdccraw 0 [string length $arg] $arg
}
 
 
 
bind raw - NOTICE connexion
proc connexion {from key arg} {
global botnick notc mod
   set text [split $arg]
   if {[join [lrange $text 2 5]] == "Notice -- Client connecting"} {
     set g_nick [lindex $text 9]
      set g_user [string range [lindex [split [lindex $text 10] "@"] 0] 1 end]
      set g_host [string range [lindex [split [lindex $text 10] "@"] 1] 0 end-1]
   set g_userhost "$g_nick!$g_user@$g_host"
   set connexion "$g_nick $g_host [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]"
    putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"
   }
   set logfichier [open "connect.txt" "a+"]
   puts $logfichier "$connexion"
   close $logfichier
   }
   return 0
   }
}
 
 
bind pub - !connect connects
proc connects { nick uhost handle channel arg } {  
   putquick "NOTICE $nick :\0033..:Liste des connexions:.."
   catch {open "connect.txt" "r"} connexion
   set num 0
   while {![eof $connexion]} {
   gets $connexion verif
if {$verif ne "" && [string match -nocase *$arg* $verif]} {incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}   }
catch {close $connexion}
   if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"; return 0
 
   }



Merci pour ton aide djkenny.
Répondre Avertir
#7
essais de remplacer ca:
TCL
if {[join [lrange $text 2 5]] == "Notice -- Client connecting"} {


par
TCL
if {[string match -nocase "*notice*client*connecting*" $text]} {


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#8
Hum, souci dans la procedure connexion, $connexion n'est pas rempli (je pense). Donc, erreur vers:
TCL
set connexion "$g_nick $g_host [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]"


Et si on remplaçait ça par:
TCL
set ts [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]
set connexion "$g_nick $g_host $ts"


Répondre
#9
nan en fait j pense que la proc ne passe pas le if, vu que " puts $logfichier "$connexion"" ne se trouve pas dans le if l erreur est logique.
pour moi c est le if qui est faux
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#10
Bonsoir,

@CrazyCat: Merci pour la réponse, j'ai remplacé les lignes que tu m'avais précisé dans le code et j'ai toujours la même erreur en partyline

Code :
<Hestia> [22:32] Tcl error [connexion]: can't read "connexion": no such variable

@djkenny: Merci aussi pour tes réponses, et si seulement tu pourrai me corriger le code, çà serait trop bien. Merci encore pour l'aide et pour le temps que tu consacres pour nous aider.

TCL
#################
##  PUTQUICK  ##
###############
 
 
proc putquick {arg} {
append arg "\n"
putdccraw 0 [string length $arg] $arg
}
 
 
 
bind raw - NOTICE connexion
proc connexion {from key arg} {
global botnick notc mod
   set text [split $arg]
    if {[string match -nocase "*notice*client*connecting*" $text]} {
     set g_nick [lindex $text 9]
      set g_user [string range [lindex [split [lindex $text 10] "@"] 0] 1 end]
      set g_host [string range [lindex [split [lindex $text 10] "@"] 1] 0 end-1]
   set g_userhost "$g_nick!$g_user@$g_host"
   set ts [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]
   set connexion "$g_nick $g_host $ts"
    putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"
   }
   set logfichier [open "connect.txt" "a+"]
   puts $logfichier "$connexion"
   close $logfichier
   }
   return 0
   }
}
 
 
bind pub - !connect connects
proc connects { nick uhost handle channel arg } {  
   putquick "NOTICE $nick :\0033..:Liste des connexions:.."
   catch {open "connect.txt" "r"} connexion
   set num 0
   while {![eof $connexion]} {
   gets $connexion verif
if {$verif ne "" && [string match -nocase *$arg* $verif]} {incr num 1;putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"}   }
catch {close $connexion}
   if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"; return 0
 
   }


Répondre Avertir
#11
Avec un code bien indenté et proprement structuré, ça donnerait plutôt:
TCL
#################
##  PUTQUICK  ##
###############
proc putquick {arg} {
   append arg "\n"
   putdccraw 0 [string length $arg] $arg
}
 
bind raw - NOTICE connexion
proc connexion {from key arg} {
   global botnick notc mod
   set text [split $arg]
   if {[string match -nocase "*notice*client*connecting*" $text]} {
      set g_nick [lindex $text 9]
      set g_user [string range [lindex [split [lindex $text 10] "@"] 0] 1 end]
      set g_host [string range [lindex [split [lindex $text 10] "@"] 1] 0 end-1]
      set g_userhost "$g_nick!$g_user@$g_host"
      set ts [clock format [clock seconds] -format "%d/%m/%Y %H:%M:%S"]
      set connexion "$g_nick $g_host $ts"
      putquick "PRIVMSG #test :\00301Connexion de:\00303 $g_nick \00301sous le host \00301$g_user\00304@\00301$g_host"
      set logfichier [open "connect.txt" "a+"]
      puts $logfichier $connexion
      close $logfichier
   }
   return 0
}
 
bind pub - !connect connects
proc connects { nick uhost handle channel arg } {  
   putquick "NOTICE $nick :\0033..:Liste des connexions:.."
   catch {open "connect.txt" "r"} connexion
   set num 0
   while {![eof $connexion]} {
      gets $connexion verif
      if {$verif ne "" && [string match -nocase *$arg* $verif]} {
         incr num 1;
         putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif 0 end] \r"
      }
   }
   catch {close $connexion}
   if {$num eq "0"} {putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
   putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";
   return 0
}


Répondre
#12
Merci CrazyCat, avec ton code j'ai plus d'erreur en PartyLine, et çà fonctionne correctement Merci beaucoup Wink

Bonne soirée a tous.
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté