使用TCL捕获SYSlog(端口514)UDP / TCP?

时间:2016-06-07 03:33:39

标签: tcl syslog

我正在寻找将端口514上的网络生成的syslog捕获到TCL变量列表(使用lappend mysyslist $newsyslogentry之类的东西)的最佳方法,或者只是附加到文件(即open "syslog.txt" a

我怀疑它需要通过每个新的(端口514)条目(即fileevent $$ readable...)的事件触发,并且如果可能的话允许其他程序访问syslog端口?

我认为网络系统日志流量是基于UDP的(不是100%肯定),但我已经开始播放UDP + TCP系统日志捕获应用程序。

有一些SYSlog客户端应用程序可用,但我需要在TCL中使用简单的端口514记录器。

我有一些想法,但任何建议都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

对于任何有兴趣的人,我在这里创建了一个UDP版本:

#!/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