Zeek 对 Linux Cooked Capture(SLL/SLL2)链路的解析:`base/packet-protocols/linux_sll` 包深度剖析
网络安全网络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),仅供参考

相关新闻

SeaTunnel Ogg JSON 格式全解析:Oracle GoldenGate 变更日志的消费、过滤与序列化实战

SeaTunnel Ogg JSON 格式全解析:Oracle GoldenGate 变更日志的消费、过滤与序列化实战

数据工程大数据批处理流处理 【免费下载链接】seatunnel SeaTunnel is a next-generation super high-performance, distributed, massive data integration tool. 项目地址: https://gitcode.com/gh_mirrors/sea/seatunnel 点击查看 免费下载 本文基于 SeaTunnel …

2026/10/11 4:27:40 阅读更多 →
PCIe Gen5协议升级与调试实战:从通道预算到链路训练

PCIe Gen5协议升级与调试实战:从通道预算到链路训练

1. PCIe Gen5 协议到底升级了什么PCIe Gen5 这两年在服务器、AI 加速卡、高端存储领域几乎是绕不开的话题。我最早接触它是在一块 FPGA 加速卡的项目上,当时从 Gen3 直接跳到 Gen5,踩的坑比想象中多得多。很多人以为 Gen5 就是"带宽翻倍"这么简…

2026/10/11 7:09:44 阅读更多 →
游戏设计模式实战指南:GameDevMind 五模式配套代码精讲

游戏设计模式实战指南:GameDevMind 五模式配套代码精讲

文档知识库教程游戏开发 【免费下载链接】GameDevMind 最全面的游戏开发技术图谱(Game Development Map)。帮助游戏开发者们在已知问题上节省时间,省出更多的精力投入到更有创造性的工作中去。 项目地址: https://gitcode.com/gonglei007/GameDevMind 点…

2026/10/10 3:59:53 阅读更多 →

最新新闻

告别语义漂移:用 BM25 与向量检索打造个人日记的混合召回(Hybrid Search)

告别语义漂移:用 BM25 与向量检索打造个人日记的混合召回(Hybrid Search)

秋雨淅淅沥沥下了一整天,空气里泛着潮湿的泥土香气。我坐在书房里,试图从这几年积攒的上千篇日记与手账随笔中,找出一年前在某家咖啡馆尝过的“桂花乌龙生椰拿铁”。 我在私有 RAG 助手里键入了这几个字,屏幕很快吐出了一堆相关记…

2026/10/11 7:52:03 阅读更多 →
轻薄笔记本上的显存天平:Q4_K_M 与 Q8_0 量化实测与生活化选型指南

轻薄笔记本上的显存天平:Q4_K_M 与 Q8_0 量化实测与生活化选型指南

秋风吹得窗台上的绿植沙沙作响,泡上一壶热白茶,把轻薄笔记本放在膝头,是在这个季节里最舒适的姿势。对于喜欢在本地掌控一切数据的开发者来说,轻薄本的安静与便携是一种难得的惬意。但这份惬意往往在打开模型下载列表的一瞬间&…

2026/10/11 7:52:03 阅读更多 →
【计算机毕业设计单片机案例】基于WIFI的自行车骑行速度里程定位远程监测装置设计 基于单片机的骑行速度里程与GPS定位联合采集系统设计(030205)

【计算机毕业设计单片机案例】基于WIFI的自行车骑行速度里程定位远程监测装置设计 基于单片机的骑行速度里程与GPS定位联合采集系统设计(030205)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/11 7:52:03 阅读更多 →
WorkBuddy FDE:90天从需求到真实用户交付路径

WorkBuddy FDE:90天从需求到真实用户交付路径

1. 这不是“从0到1”,而是“从一句话到真用户”的真实压缩路径“WorkBuddy FDE”这个名称本身就很说明问题——它不叫“WorkBuddy Pro”或“WorkBuddy AI”,而是一个带明确角色后缀的缩写。FDE,即 Frontend Developer(前端开发者&…

2026/10/11 7:52:03 阅读更多 →
从模糊需求到90天上线:WorkBuddy FDE方法论实战手册

从模糊需求到90天上线:WorkBuddy FDE方法论实战手册

我接到 WorkBuddy 这个项目时,需求文档只有一句话:做一个能帮团队把任务理清楚的 App。没有用户画像,没有流程图,没有竞品分析,甚至没人说清楚要先做手机版还是网页版。我当时的反应是:这个项目如果直接动手…

2026/10/11 7:52:03 阅读更多 →
NMODBUS 工业通信实战:.NET 下 Modbus TCP/RTU 开发与避坑指南

NMODBUS 工业通信实战:.NET 下 Modbus TCP/RTU 开发与避坑指南

简介:NMODBUS.zip 是一套面向 C# 开发者的 MODBUS TCP/IP 通信库资源,适合刚接触工业自动化协议、需要快速与 PLC 建立数据交互的新手与中级开发者。它封装了 ModbusTcpMaster 等核心类,提供读写保持寄存器、线圈以及数据转换、异常处理等常用…

2026/10/11 7:51:03 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →