【发布时间】:2017-09-07 21:49:36
【问题描述】:
我需要使用 grep / egrep / sed 从 SNORT 规则字符串中提取某些部分。
给定一个可以采用以下格式的字符串:
alert tcp any any -> any any (msg:"Some message";
content:"c1"; content:"GET /blah"; offset:0; depth:9; content:"something else";)
我将如何提取以下内容:
content:"GET /blah"; offset:0; depth:9;
鉴于以下情况属实:
- 必须匹配到下一个内容匹配开始(如果有的话)
- 一个规则可能只有这个内容术语,它可能有更多,它们可能是任何顺序
- 其他修饰符可以在偏移和深度运算符之前、之后或之间应用,它们也必须按如下方式提取:
content:"GET "; offset:5; http_uri; depth:12;
规则可能是“格式错误的”,即内容术语后可能有两个或更多,而不是单个分号。
到目前为止,我认为可以在其他正则表达式系统中使用的是:
(GET|POST).*?(?=content)
这背后的想法是.*? 是对任何字符的任意次数的不贪婪匹配,并且在下一个术语“内容”上是非抓取(不确定是否是术语)匹配。
我相信如果没有以下内容术语并且似乎也没有在 grep 或 egrep 中提取任何内容,这会中断。
不知道该怎么做,有什么想法吗?
【问题讨论】:
-
我最近有一个类似的问题,也许对你有帮助:stackoverflow.com/questions/45969677/…