用于匹配SNMP陷阱的正则表达式

时间:2013-11-04 12:46:17

标签: regex perl snmp net-snmp

我在后台运行了一个snmptrapd守护程序,并将所有陷阱记录到一个文件中,我试图在perl程序中解析该日志

正在记录SNMP v2c陷阱,如下所示:

SNMPv2[**]2013-11-4[**]13:16:49[**]UDP: [127.0.0.1]:57819->[127.0.0.1][**].1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.2.3.0.1       .1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol

我已使用正则表达式成功解析了OID和远程IP地址,但我无法解析所有剩余的陷阱值。那些是:

.1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol

语法似乎很简单:TRAP_STUFF = TYPE:VALUE重复0次或更多次。

所以问题是哪个正则表达式可以让我获取所有这些信息?

1 个答案:

答案 0 :(得分:1)

基本上,对于日志行的左侧部分,您可以使用while逐块解析信息regex

my $str = ".1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol";
while ($str =~ /([\.\d]+)\s=\s([^:]+):\s([\S]+)/g) {
    my ($trap_stuff, $type, $value) = ($1, $2, $3);
    print "trap_stuff: $trap_stuff\ntype: $type\nvalue: $value\n";
}

输出:

trap_stuff: .1.3.6.1.4.1.8072.2.3.2.1
type: INTEGER
value: 30
trap_stuff: .1.3.6.1.4.1.8072.2.3.2.2
type: STRING
value: lol