使用 PyParsing 解析 Snort 日志

2024-03-21

使用 pyparsing 模块解析 Snort 日志时遇到问题。

问题在于分离 Snort 日志(它有多行条目,由空行分隔)并让 pyparsing 将每个条目解析为一个整体块,而不是逐行读取并期望语法适用于每一行(显然, 它不是。)

我尝试将每个块转换为临时字符串,删除每个块内的换行符,但它拒绝正确处理。我可能完全走错了路,但我不这么认为(类似的形式非常适合系统日志类型的日志,但这些是单行条目,因此适合您的基本文件迭代器/行处理)

这是我迄今为止拥有的日志和代码的示例:

[**] [1:486:4] ICMP Destination Unreachable Communication with Destination Host is Administratively Prohibited [**]
[Classification: Misc activity] [Priority: 3] 
08/03-07:30:02.233350 172.143.241.86 -> 63.44.2.33
ICMP TTL:61 TOS:0xC0 ID:49461 IpLen:20 DgmLen:88
Type:3  Code:10  DESTINATION UNREACHABLE: ADMINISTRATIVELY PROHIBITED HOST FILTERED
** ORIGINAL DATAGRAM DUMP:
63.44.2.33:41235 -> 172.143.241.86:4949
TCP TTL:61 TOS:0x0 ID:36212 IpLen:20 DgmLen:60 DF
Seq: 0xF74E606
(32 more bytes of original packet)
** END OF DUMP

[**] ...more like this [**]

以及更新后的代码:

def snort_parse(logfile):
    header = Suppress("[**] [") + Combine(integer + ":" + integer + ":" + integer) + Suppress("]") + Regex(".*") + Suppress("[**]")
    cls = Optional(Suppress("[Classification:") + Regex(".*") + Suppress("]"))
    pri = Suppress("[Priority:") + integer + Suppress("]")
    date = integer + "/" + integer + "-" + integer + ":" + integer + "." + Suppress(integer)
    src_ip = ip_addr + Suppress("->")
    dest_ip = ip_addr
    extra = Regex(".*")

    bnf = header + cls + pri + date + src_ip + dest_ip + extra

    def logreader(logfile):
        chunk = []
        with open(logfile) as snort_logfile:
            for line in snort_logfile:
                if line !='\n':
                    line = line[:-1]
                    chunk.append(line)
                    continue
                else:
                    print chunk
                    yield " ".join(chunk)
                    chunk = []

    string_to_parse = "".join(logreader(logfile).next())
    fields = bnf.parseString(string_to_parse)
    print fields

任何帮助、指示、RTFM、你做错了等等,非常感谢。


import pyparsing as pyp
import itertools

integer = pyp.Word(pyp.nums)
ip_addr = pyp.Combine(integer+'.'+integer+'.'+integer+'.'+integer)

def snort_parse(logfile):
    header = (pyp.Suppress("[**] [")
              + pyp.Combine(integer + ":" + integer + ":" + integer)
              + pyp.Suppress(pyp.SkipTo("[**]", include = True)))
    cls = (
        pyp.Suppress(pyp.Optional(pyp.Literal("[Classification:")))
        + pyp.Regex("[^]]*") + pyp.Suppress(']'))

    pri = pyp.Suppress("[Priority:") + integer + pyp.Suppress("]")
    date = pyp.Combine(
        integer+"/"+integer+'-'+integer+':'+integer+':'+integer+'.'+integer)
    src_ip = ip_addr + pyp.Suppress("->")
    dest_ip = ip_addr

    bnf = header+cls+pri+date+src_ip+dest_ip

    with open(logfile) as snort_logfile:
        for has_content, grp in itertools.groupby(
                snort_logfile, key = lambda x: bool(x.strip())):
            if has_content:
                tmpStr = ''.join(grp)
                fields = bnf.searchString(tmpStr)
                print(fields)

snort_parse('snort_file')

yields

[['1:486:4', 'Misc activity', '3', '08/03-07:30:02.233350', '172.143.241.86', '63.44.2.33']]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PyParsing 解析 Snort 日志 的相关文章

随机推荐

  • 为 iOS 5.0 编译时,什么会导致“未找到符号:_objc_setProperty_atomic”错误?

    我在 IOS 5 中遇到编译错误 我得到的错误是 wait fences failed to receive reply 10004003 dyld lazy symbol binding failed Symbol not found o
  • 我可以为 dapper-dot-net 映射指定数据库列名称吗?

    dapper dot net 有没有办法使用属性来指定应该使用的列名称而不是属性名称 public class Code public int Id get set public string Type get set This is ca
  • mulx 的 AT&T / GAS 语法是什么? [复制]

    这个问题在这里已经有答案了 The 维基教科书 x86 汇编 https en wikibooks org wiki X86 Assembly GAS Syntax says GAS指令一般具有助记符源 目的地的形式 例如 以下 mov 指
  • 如何将 4.3 舍入为 4.5

    给定一个小数点后一位的值 如何将该小数点四舍五入到半步 如果我有一个值 比如说 4 3 我如何在 PHP 中将其舍入为4 5 其他例子是 3 8 gt gt 4 0 2 1 gt gt 2 5 0 9 gt gt 1 0 另外我应该提到我正
  • dockerizing Nodejs 应用程序 - 当我第一次启动容器时 pm2 ls 应该工作吗

    我有以下快递 节点应用程序 FROM node 12 WORKDIR usr share jtapp COPY package json RUN apt get update RUN apt get install y net tools
  • 是否可以将单独的应用程序加载到 iPhone 中?

    我有一部 iPhone 并且我已经使用 Xcode 创建了一个应用程序 现在我想把这个应用程序移到我的 iPhone 中供我使用 如何做呢 我尝试使用手机查看软件将我的应用程序复制到 iPhone 应用程序文件夹 但我无法在 iPhone
  • 用于 Web 组件/自定义事件 (JS) 的基于 HTML 的事件侦听器

    TL DR 是否可以在 HTML 而不是 JS 中为自定义事件定义事件侦听器 以此为基础codepen https codepen io tony19 pen EWerge editors 1011 我正在尝试执行以下操作
  • php中while循环的一维数组[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要检索 while 循环内的数组
  • 使用zxing时找不到类

    所以我正在开发一个可以扫描二维码的应用程序 我下载了 ZXing 库 使用 apache ant 构建它来获取 core jar 将其放入我的项目文件夹中并将其作为 jar 添加到构建路径中 当我尝试执行以下操作时不 Intent inte
  • 使用 BeautifulSoup 捕获 JavaScript 警报文本

    我正在使用这个 JavaScript 来验证表单
  • 将字符串附加到 Terraform 中列表的每个元素

    我的想法是通过向每个元素附加一个字符串来修改列表的元素 如何才能实现这一目标 我还没有找到任何功能可以让我做到这一点 你有没有尝试过格式列表 https www terraform io docs configuration interpo
  • Java:自动装箱和强制转换之间有什么区别?

    这个问题 https stackoverflow com questions 501412 why does autoboxing make some calls ambiguous in java是关于 为什么自动装箱会使 Java 中的
  • 免费的 C# XML Diff 库或类

    我正在寻找 XML Diff 类或库 我的要求有 开源 输出的对象模型 相当快 对于 4mb XML 我正在尝试使用 MS XML Diff 和修补工具 但我想获取具有 2 个 XML 文件 而不是 HTML 标记 差异的对象列表 UPD
  • Xamarin Android - 没有流程布局?

    我想以流程布局方式显示几个具有动态大小的小部件 但我似乎找不到流程布局 Xamarin for Android 中真的没有 flowlayout 作为框架的一部分吗 不 据我所知 Xamarin Android 中没有 flowlayout
  • 使用 ember 评估车把中的两个条件

    我想知道是否可以做这样的事情 if ClientController Client number PhoneController hasLinesToInstall if Thanks Juanitos 我认为不可能在车把中链接这样的条件
  • 真正的缩放是什么?

    我听说人们说他们已经制作了一个可扩展的 Web 应用程序 真正的缩放是什么 开发人员可以采取哪些措施来使其应用程序具有可扩展性 开发人员在扩展过程中会考虑哪些因素 有关使用 ASP NET 和 SQL Server 扩展 Web 应用程序的
  • 回购协议中的 TWIG 查询生成器

    我尝试将其放入referralentity php public function getTotalReferrals qb this gt createQueryBuilder r qb gt select COUNT r id AS t
  • 将语言名称转换为区域设置代码

    PHP 中是否有规范的方法来执行此操作 Java 问题 区域设置 语言名称到国家 语言代码 https stackoverflow com questions 20518000 locale language name to country
  • Android Studio:多模块项目中外部 JAR 的链接

    我有一个 Android 应用程序 在 Android Studio 上运行 它由 2 个模块组成 有一个低级纯java模块 我们称之为模块A 在它的顶部 有模块 B 它是 Android 应用程序 它依赖于 moduleA 来进行某些处理
  • 使用 PyParsing 解析 Snort 日志

    使用 pyparsing 模块解析 Snort 日志时遇到问题 问题在于分离 Snort 日志 它有多行条目 由空行分隔 并让 pyparsing 将每个条目解析为一个整体块 而不是逐行读取并期望语法适用于每一行 显然 它不是 我尝试将每个