【问题标题】:Regular expression for matching SNMP traps匹配 SNMP 陷阱的正则表达式
【发布时间】:2013-11-04 12:46:16
【问题描述】:

我有一个 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 次或多次。

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

【问题讨论】:

    标签: regex perl snmp net-snmp


    【解决方案1】:

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

    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
    

    【讨论】:

    • 我在这个正则表达式中发现了一个问题,当 $str 是这样的:SNMPv2[**]2013-11-7[**]16:38:40[**]UDP: [127.0.0.1]:53186->[127.0.0.1][**].1.3.6.1.2.1.1.3.0 = Timeticks: (4567890) 12:41:18.90 .1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.6306 .1.3.6.1.4.1.6306.2.1.1.0 = STRING: "05/08 13:26:35" STRING: "05/08 13:26:35" 部分没有正确匹配。
    • @user1816323 似乎您要匹配的模式变化很大。您是否有要解析的信息列表?我不知道所有的情况。
    • 我通过在最后一个 \S 后面的正则表达式中添加一个空格来修复它。所以是/([\.\d]+)\s=\s([^:]+):\s([\S ]+)/g
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多