【网络入侵检测】基于源码分析Suricata的解码模块

【作者主页】只道当时是寻常

【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。

1. 概要

👋 在 Suricata 中,数据包解码功能由一套模块化架构支撑。无论其运行于 PCAP、NFQ、DPDK 或其他模式,尽管各运行模式分别对应 DecodePcap、DecodeNFQ、DecodeDPDK 等特定解码函数,但在执行流程中,最终均会收敛至 DecodeLinkLayer、DecodeIPV4 或 DecodeIPV6 等核心解码函数,完成链路层与网络层数据包的解析处理。本文主要解码 Suricata 中解码模块是如何从链路层到传输层解析各层包头的。

2. 解码网络包

2.1 解码链路层

DecodeLinkLayer函数根据数据链路类型调用相应的解码器来处理网络数据包。

  • DecodeEthernet:处理以太网帧。

  • DecodeSll:处理 Linux 的cooked capture(SSL)数据。

  • DecodePPP:处理 PPP (Point-to-Point Protocol) 数据。

  • DecodeRaw:处理原始 IP 数据包。

  • DecodeNull:处理 BSD 环回封装数据。

  • DecodeCHDLC:处理 Cisco HDLC 封装数据。

Linux 的 cooked capture (SLL) 数据是一种特殊的数据包捕获格式,用于在 Linux 系统中捕获网络数据包。它主要用于在无法直接访问底层网络设备(如以太网卡)的情况下捕获数据包,例如在虚拟网络接口或隧道接口上。

PPP (Point-to-Point Protocol) 是一种数据链路层协议,主要用于在两个节点之间直接传输数据包。它通常用于拨号连接、DSL、串行连接等场景。

BSD 环回封装数据 是一种特殊的网络数据包封装格式,主要用于在 BSD 系统(如 FreeBSD、OpenBSD 等)的环回接口(lo)上传输数据包。

Cisco HDLC (High-Level Data Link Control) 是一种由 Cisco 开发的链路层协议,用于在串行链路上传输数据。它是 HDLC 协议的变种,主要用于 Cisco 设备之间的点对点连接。

鉴于以太网报文解码最为常用,本文重点剖析其解码流程。

DecodeEthernet 函数会对报文长度进行检测,同时判断链路层协议类型。该链路层协议类型是确定网络层对应解码函数的关键标识。该函数代码如下:

int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_只道当时是寻常

打赏不得超过工资的一半呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值