使用awk进行数据提取操作

成都

我有一个snort.rule文件,我需要从该行中提取cve数字,后跟引用键,并将其附加回花括号内同一行的msg字段中,以下是旧日志。

警报udp $ HOME_NET 1900->任何(msg:“ ET信息UPnP发现搜索响应易受攻击的UPnP设备2”;内容:“针对UPnP设备的英特尔SDK”; pcre:“ / ^ Server \ x3a [^ \ r \ n] *用于UPnP设备的英特尔SDK / mi“;参考:/ infosec / blog / 2013/01/29;参考:arch / UPnP-arch-DeviceArchitecture-v1.1.pdf;参考:cve,2012-5958;参考:cve ,2012-5959; sid:2016303; rev:4;)

所需的输出如下,新的更改为粗体,

警报udp $ HOME_NET 1900->任何(msg:“ ET信息UPnP发现搜索响应易受攻击的UPnP设备2 {cve,2012-5958 cve,2012-5959} ”;内容:“用于UPnP设备的英特尔SDK”; pcre:“ / ^ Server \ x3a [^ \ r \ n] *用于UPnP设备的英特尔SDK / mi“;参考:/ infosec / blog / 2013/01/29;参考:arch / UPnP-arch-DeviceArchitecture-v1.1.pdf ;参考:cve,2012-5958;参考:cve,2012-5959; sid:2016303; rev:4;)

我的awk代码确实有问题,它是在显示结果的同时删除所有键之间的分号,最后一个子函数是罪魁祸首,我需要更正以下代码:

awk -F\; '
{
  for ( i = 1 ; i <= NF ; i++ ) {
    if ( $i ~ "msg" )
      a = i
    if ( $i ~ "reference:cve," ) {
      b = $i
      sub ( ".*:" , "" , b )
      c = c " " b 
      }
    }
  sub ( "$" , "{" c "\"}" , $a )
} 1' snort.rule
斯蒂芬·查泽拉斯(Stephane Chazelas)

我会perl在这里用

perl -pe '$" = " "; @cves = /reference:\s*(cve,\d+-\d+)/g;
   s/msg:\s*"(?:\\.|[^\\"])*\K/ {@cves}/ if (@cves)'

还处理msg带有的\"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章