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

Posted

技术标签:

【中文标题】使用 TCL 捕获 SYSlog(端口 514)UDP/TCP?【英文标题】:Using TCL to capture SYSlog (port 514) UDP/TCP? 【发布时间】:2016-06-07 03:33:39 【问题描述】:

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

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

我相信网络系统日志流量是基于 UDP 的(不是 100% 肯定),但我已经播种了 UDP + TCP 系统日志捕获应用程序。

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

我有一些想法,但任何建议都将不胜感激。

【问题讨论】:

有什么理由不只是查看标准系统日志写入的文件吗? (此外,Tcl 需要一个扩展包来与 UDP 通信。已经有人提议改变这一点,但由于各种原因还没有实现。) 这是当前的访问方法,但我需要通过我的 TCL 脚本包含 syslog'ing(为了可移植性),因为客户端将没有 syslog'ing 并且所有 syslog 数据都来自调制解调器/路由器通过端口 514。是否有 TCP 系统日志数据之类的东西,还是只是 UDP? (UDP 在广播中更有意义) 【参考方案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

【讨论】:

以上是关于使用 TCL 捕获 SYSlog(端口 514)UDP/TCP?的主要内容,如果未能解决你的问题,请参考以下文章

QRadar 没有监听 514 端口

logstash实战input插件syslog

Mule Syslog 入站端点

将Windows日志转换为Syslog

如何使用 syslog.h 将消息发送到远程 syslog

浅谈Linux下的syslog守护进程