

【作者主页】只道当时是寻常
【专栏介绍】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


5324

被折叠的 条评论
为什么被折叠?



