1

我有一个在后台运行的 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 次或更多次。

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

4

1 回答 1

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
于 2013-11-04T15:38:22.030 回答