2016-06-07 18 views
0

Ich bin für den besten Weg, um Netzwerk zu erfassen syslog auf Port 514 zu einer TCL Variablenliste (mit so etwas wie lappend mysyslist $newsyslogentry) erzeugt, oder einfach nur in eine Datei anhang (dh open "syslog.txt" a)Verwenden von TCL zum Aufzeichnen von SYSlog (Port 514) UDP/TCP?

Ich vermute, es müßte über ein Event mit jedem neuen (Port 514) Eintrag ausgelöst werden (zB fileevent $$ readable...) und wenn möglich anderen Programmen den Zugriff auf den Syslog-Port erlauben?

Ich glaube Netzwerk Syslog Verkehr ist UDP-basiert (nicht 100% sicher), aber ich habe Seed UDP + TCP Syslog-Capture-Apps herum.

Es gibt ein paar SYSlog-Client-Apps zur Verfügung, aber ich brauche einen einfachen Port 514 Recorder in TCL.

Ich habe einige Ideen, aber irgendwelche Vorschläge würden geschätzt.

+0

Gibt es Gründe, nicht nur für die Dateien zu beobachten, dass die Standard-syslog schreibt? (Außerdem benötigt Tcl ein Erweiterungspaket, um UDP überhaupt zu sprechen. Es gab Vorschläge, dies zu ändern, aber aus verschiedenen Gründen hat es noch keine Implementierung erreicht.) –

+0

Das ist die aktuelle Methode des Zugriffs, aber ich muss syslog 'einbeziehen über mein TCL-Skript (für Portabilität), da die Clients kein Syslog haben und alle Syslog-Daten vom Modem/Router über Port 514 kommen. Gibt es so etwas wie TCP-Syslog-Daten oder ist es nur UDP? (UDP macht bei einer Sendung mehr Sinn) – jkeys

Antwort

1

Für jeden, der interessiert ist, habe ich eine UDP-Version hier erstellt:

#!/usr/local/bin/tclsh 
package require udp ; # load the required UDP Package 

set port 514 ; # default SYSlog port 
set logfile "udp_syslog.txt" ; # set the log filename to log data to 

# Capture the UDP data here 
proc udp_triggered {} { 
    global dg logfile ; # ensure the global variables work in this procedure 
    set rcdata [read $dg(udp)] ; # grab the UDP data within rcdata 
    set udp_log [open $logfile a] ; # open the specified logfile to append to (auto-creates if does not exist) 
    puts $udp_log $rcdata ; # place the UDP data line into the log file 
    close $udp_log ; # close the log file 
    return 
} 

set dg(udp) [udp_open $port] ; # setup the UDP capture port 
fileevent $dg(udp) readable udp_triggered ; # setup the event trigger when the UDP port becomes readable and execute the procedure to capture the data 
vwait forever ; # activates the (fileevent) trigger to wait for UDP data