网络安全网络IDS【免费下载链接】zeekZeek is a powerful network analysis framework that is much different from the typical IDS you may know.项目地址https://gitcode.com/gh_mirrors/ze/zeek点击查看免费下载本指南围绕 Zeek 仓库中的base/packet-protocols/linux_sll文档包展开系统讲解 Zeek 如何解析 Linux 环境下的 SLLLinux cooked capture v1与 SLL2v2两种链路层封装格式。阅读本文后你将掌握该包的文件结构与加载链、Ethertype 分发表的作用、SLL/SLL2 头部字段的底层含义以及对应 C 分析器的实现细节能够自行排查在 Linuxany接口上抓包却无法被正确解析这类问题。一、文档包概览它是什么、解决什么问题doc/scripts/base/packet-protocols/linux_sll/index.rst是 zeekygen 为base/packet-protocols/linux_sll包生成的索引文档。该包属于 Zeek 内置基础脚本体系scripts/base/packet-protocols/核心职责是在链路层对 Linux cooked capture 帧进行二次分发。Linux 下使用tcpdump/Wireshark 在any接口上抓包时内核并不采用标准以太网头而是以 cooked伪头形式给出链路层信息对应 libpcap 的LINKTYPE_LINUX_SLLSLL即 SLL v1与较新的LINKTYPE_LINUX_SLL2SLL2v2。Zeek 为此实现了两个独立的 packet analyzerPacketAnalyzer::LINUXSLL与PacketAnalyzer::LINUXSLL2确保来自这类链路的报文能继续进入 IP/ARP 等上层协议分析。文档包内共三个页面各自对应仓库中的真实文件文档页面对应仓库文件内容index.rst包索引汇总列出本包加载入口与主脚本load.zeek.rstload.zeek包加载入口Imports 主脚本main.zeek.rstmain.zeek核心脚本命名空间PacketAnalyzer::LINUXSLL注意linux_sll2的文档页面同样被本包索引引用/scripts/base/packet-protocols/linux_sll2/__load__.zeek、main.zeek因此在阅读与配置时需将两个子包视为一个整体。二、加载链从__load__.zeek到主脚本与 Zeek 其他基础脚本包一致本包采用入口文件 主脚本的组织方式# scripts/base/packet-protocols/linux_sll/__load__.zeek load ./main__load__.zeek仅做一件事加载同目录下的main.zeek。而包的顶层聚合发生在 scripts/base/packet-protocols/load.zeekload base/packet-protocols/linux_sll load base/packet-protocols/linux_sll2也就是说只要 Zeek 加载了base/packet-protocols默认的base/init-default.zeek链路即包含两个 SLL 分析器就会自动注册无需用户手动load。这一点也解释了为什么文档索引中会同时列出linux_sll与linux_sll2两个包的四个文档页面。三、主脚本Ethertype 分发表的注册逻辑main.zeek是整个包的逻辑核心完整内容如下scripts/base/packet-protocols/linux_sll/main.zeekmodule PacketAnalyzer::LINUXSLL; event zeek_init() priority20 { PacketAnalyzer::register_packet_analyzer(PacketAnalyzer::ANALYZER_LINUXSLL, 0x0800, PacketAnalyzer::ANALYZER_IP); PacketAnalyzer::register_packet_analyzer(PacketAnalyzer::ANALYZER_LINUXSLL, 0x86DD, PacketAnalyzer::ANALYZER_IP); PacketAnalyzer::register_packet_analyzer(PacketAnalyzer::ANALYZER_LINUXSLL, 0x0806, PacketAnalyzer::ANALYZER_ARP); # RARP PacketAnalyzer::register_packet_analyzer(PacketAnalyzer::ANALYZER_LINUXSLL, 0x8035, PacketAnalyzer::ANALYZER_ARP); }linux_sll2的 main.zeek 结构完全相同仅命名空间换为PacketAnalyzer::LINUXSLL2、分析器标签换为ANALYZER_LINUXSLL2。关键要点注册时机zeek_init事件配合priority20确保在协议分发框架完成初始化后、报文处理开始前完成注册。分发依据是 EthertypeSLL/SLL2 头部都包含一个protocol_type协议类型字段其取值与以太网 Ethertype 语义一致因此直接用它做二次分发0x0800IPv4→PacketAnalyzer::ANALYZER_IP0x86DDIPv6→PacketAnalyzer::ANALYZER_IP0x0806ARP→PacketAnalyzer::ANALYZER_ARP0x8035RARP→PacketAnalyzer::ANALYZER_ARP注释明确标注 RARP两种 SLL 均注册ANALYZER_LINUXSLL与ANALYZER_LINUXSLL2各自维护独立的分发表互不干扰。从源码结构看这套注册机制与 Zeek 统一的分发框架一致上层分析器通过ForwardPacket依据标识符这里即 Ethertype查找已注册的下游分析器并转发报文。四、C 实现SLL/SLL2 头部的解析原理脚本只负责注册真正的头部解析在 C 插件中完成。两个插件均由zeek_add_plugin构建见 src/packet_analysis/protocol/linux_sll/CMakeLists.txt 与 src/packet_analysis/protocol/linux_sll2/CMakeLists.txt并被父级 src/packet_analysis/protocol/CMakeLists.txt 的add_subdirectory(linux_sll)/add_subdirectory(linux_sll2)纳入构建。4.1 SLLv1头部结构LinuxSLL.h 中定义了 16 字节的SLLHeader使用#pragma pack(push, 1)保证跨编译器紧凑布局源码注释说明其布局基于 tcpdump 的LINKTYPE_LINUX_SLL规范字段类型字节偏移含义packet_typeuint16_t0报文方向/类型如发往本机、广播、组播等arphrd_typeuint16_t2链路层地址类型ARPHRD_*如以太网为 1addr_lenuint16_t4链路层地址长度字节addruint64_t6链路层源地址8 字节容器实际有效长度由addr_len决定protocol_typeuint16_t14协议类型Ethertype 语义如 0x08004.2 SLL2v2头部结构LinuxSLL2.h 中的SLL2Header为 20 字节基于LINKTYPE_LINUX_SLL2字段顺序与 v1 明显不同字段类型字节偏移含义protocol_typeuint16_t0协议类型Ethertypereserveduint16_t2保留字段interface_indexuint32_t4接口索引更精确地标识报文来源接口arphrd_typeuint16_t8链路层地址类型packet_typeuint8_t10报文方向/类型addr_lenuint8_t11链路层地址长度addruint64_t12链路层源地址4.3 解析主流程两个分析器的AnalyzePacket逻辑几乎一致以 LinuxSLL.cc 为例bool LinuxSLLAnalyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* packet) { auto len_sll_hdr sizeof(SLLHeader); if ( len_sll_hdr len ) { Weird(truncated_Linux_SLL_header, packet); return false; } auto hdr reinterpret_castconst SLLHeader*(data); uint32_t protocol ntohs(hdr-protocol_type); packet-l2_src reinterpret_castconst u_char*(hdr-addr); // SLL doesnt include a destination address in the header... packet-l2_dst Packet::L2_EMPTY_ADDR; return ForwardPacket(len - len_sll_hdr, data len_sll_hdr, packet, protocol); }流程可归纳为四步长度校验若报文总长不足一个头部sizeof(SLLHeader) len调用Weird(truncated_Linux_SLL_header, packet)记录异常并丢弃防止越界读取。读取协议类型以ntohs将网络字节序的protocol_type转为主机序作为后续分发的标识。设置 L2 地址将addr字段指向的字节设为packet-l2_src源地址由于 SLL 头不携带目的地址l2_dst被显式置为Packet::L2_EMPTY_ADDR。源码注释特别强调若不设置l2_dst会在后续流程中引发崩溃——这是 Zeek 内部Packet结构对目标地址字段的硬性要求。转发ForwardPacket(len - len_sll_hdr, data len_sll_hdr, packet, protocol)跳过头部、按 Ethertype 把剩余负载交给已注册的下游分析器如 IP 或 ARP。ForwardPacket定义于 Analyzer.h是 Zeek 报文分析链上标准的按标识符转发入口。SLL2 的 LinuxSLL2.cc 除头部大小与Weird事件名truncated_Linux_SLL2_header不同外逻辑完全相同。4.4 插件封装每个 C 分析器都通过标准插件机制暴露给 Zeek 运行时见 linux_sll/Plugin.cc组件名LinuxSLL插件名Zeek::LinuxSLL描述Linux cooked capture (SLL) packet analyzer这一定义使得zeek -N Zeek::LinuxSLL等插件查询命令能够列出该分析器也便于诊断分析器是否已加载类问题。五、实现约束与注意事项假设始终存在 Ethertype两个分析器都假设能看到 Ethertype 且不区分不同的 ARPHRD 类型源码注释明确说明并指向 tcpdump 的 LINUX_SLL/LINUX_SLL2 规范。即 Zeek 直接取protocol_type字段做分发不校验arphrd_type对应的地址格式。对于非以太网 ARPHRD如 Linux 环路、点对点链路上抓到的 cooked 帧这一简化可能影响地址语义的判断使用时应了解此边界。地址仅含源地址cooked 帧没有目的 MAC因此conn等上层逻辑中的 L2 目的信息为空占位依赖 L2 目的地址的脚本逻辑需要自行兜底。两个包必须协同存在现代 libpcap 在 Linuxany接口上可能产生 SLL 或 SLL2 两种链路类型取决于 libpcap/内核版本与抓包工具参数Zeek 默认同时注册两者以覆盖全部情况因此不要只保留其中一个。六、实战如何让 Zeek 正确分析 Linux cooked 捕获要让 Zeek 正确处理 SLL/SLL2 链路关键是保证抓包环节产出 cooked 帧且 Zeek 侧分析器可用确认加载默认base/packet-protocols已包含本包无需手动load可用zeek -N查看Zeek::LinuxSLL插件是否在列。抓包源在 Linux 上对any接口抓包如tcpdump -i any或显式指定链路类型为LINUX_SLL/LINUX_SLL2的捕获文件是触发本分析器的典型场景标准以太网接口eth0等走的是ethernet分析器与本包无关。验证链路若发现报文未进入 IP 分析优先检查捕获文件的链路类型capinfos/tcpdump -L可查看以及是否存在truncated_Linux_SLL_header/truncated_Linux_SLL2_header这类weird日志——后者通常意味着捕获不完整或链路类型识别错误。七、总结base/packet-protocols/linux_sll文档包虽以简短的索引页形式呈现但其背后是 Zeek 链路层解析体系中不可替代的一环通过 main.zeek 的 Ethertype 注册表与 LinuxSLL.cc、LinuxSLL2.cc 的头部解析实现Zeek 能够无缝衔接 Linux cooked capture v1/v2 与上层 IP/ARP 分析链。理解 SLL/SLL2 头部的字段布局、分发机制与 L2 地址处理细节是排查 Linux 抓包环境下协议分析异常的关键知识。赞分享网络安全网络IDS【免费下载链接】zeekZeek is a powerful network analysis framework that is much different from the typical IDS you may know.项目地址https://gitcode.com/gh_mirrors/ze/zeek点击查看免费下载相关推荐Zeek GRE 隧道分析packet-protocols/gre 包配置与源码级解析原理Zeek GRE 隧道分析packet protocols/gre 包配置与源码级解析原理 导读 本文聚焦 Zeek 内置脚本包 base/packet pr网络安全网络IDSZeek 包分析框架Packet Analysis深入解析从链路层解析到会话构建的插件化架构Zeek 包分析框架Packet Analysis深入解析从链路层解析到会话构建的插件化架构 Packet Analysis包分析是 Zeek 负责解网络安全网络IDSZeek 连接分析基础包 base/protocols/conn 全解析conn.log 字段、清理钩子与字节/包/时长阈值 APIZeek 连接分析基础包 base/protocols/conn 全解析conn.log 字段、清理钩子与字节/包/时长阈值 API 导读 base/prot网络安全网络IDS上一篇Basscss社区生态探索相关工具和资源的完整清单下一篇CANN/Ascend C向量加法样例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考