
Go语言+libbpfgo实战eBPF开发
文章平均质量分 94
本专栏将通过实战案例的方式,由浅入深地带你掌握使用`Go`语言和`libbpfgo`库开发`eBPF`程序。
内核程序员kevin
我是一名程序员, 专注于Linux应用程序与内核模块开发,喜欢研究各种技术。目前担任某数据安全企业架构师, 在安全软件研发和架构领域深耕近15年。
我希望能帮助更多的程序员成长。
欢迎关注我,让我们一起探讨技术,共同进步。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
eBPF 实时捕获键盘输入
本文将介绍如何使用eBPF技术通过`Go`语言和`libbpfgo`实现键盘输入的实时捕获。文章首先概述了利用eBPF的`kprobe`技术来监听内核函数`input_handle_event`,从而在按键事件发生时捕获数据,并将其传递到用户空间进行处理。文中详细讲解了从硬件中断触发到字符显示在终端上的完整流程,包括内核态与用户态的不同捕获方式。原创 2025-03-15 21:15:00 · 844 阅读 · 0 评论 -
eBPF XDP 实现简单防火墙
本文介绍了如何使用eBPF的XDP(eXpress Data Path)技术实现一个简单的防火墙。XDP能够在网卡驱动层高速处理数据包,通过几种操作如XDP_PASS、XDP_DROP等来过滤或丢弃不符合规则的流量,相比传统的iptables和tc方案具有更低的CPU开销和更快的处理速度。文中详细讲解了基于IPv4的数据包解析过程以及如何利用eBPF map存储和匹配防火墙规则,实现了对特定源IP、目标IP、端口及协议的数据包进行过滤。原创 2025-03-13 09:15:00 · 913 阅读 · 0 评论 -
eBPF uprobe审计sshd登录用户和密码
本文介绍了如何使用eBPF的uprobe功能来审计sshd登录用户和密码。首先,文章解释了sshd验证用户密码的流程,特别是auth_password()函数的作用。接着,详细解析了eBPF程序如何绑定到auth_password()函数,通过逐层解引用从ssh结构体中读取用户名和密码,并通过perf_event_output()将信息上报至用户空间。此外,还展示了Go语言部分代码如何加载eBPF程序、创建perf buffer监听事件并解析打印用户名和密码。原创 2025-03-12 09:15:00 · 881 阅读 · 0 评论 -
eBPF uprobe 跟踪动态库中的函数
本文介绍了使用eBPF的`uprobe`机制来跟踪动态库中的函数调用,特别是针对`libc.so.6`中的`mkdir()`函数。通过`libbpf`自动解析符号地址并附加到目标函数,文中详细讲解了如何定义eBPF程序以捕获函数调用时的参数和进程信息,并通过`bpf_perf_event_output()`将这些信息发送至用户态进行处理。此外,还展示了如何利用Go语言加载和附加eBPF程序,包括自动化与手动指定符号地址的方法。原创 2025-03-11 09:15:00 · 924 阅读 · 0 评论 -
eBPF uprobe 应用程序跟踪
本文介绍了使用eBPF的uprobe机制来跟踪用户态程序中的函数调用。首先,文章解释了uprobe的基本原理和工作流程,强调了与kprobe的区别在于其针对用户态进程。接着,详细说明了如何通过符号地址挂载uprobe,因为用户态程序的函数地址可能因ASLR而变化。文中还展示了如何利用libbpfgo将探针挂载到指定函数,并提供了Go语言代码示例来加载eBPF程序、绑定uprobe及监听perf buffer以输出目标函数的调用信息。原创 2025-03-10 09:15:00 · 815 阅读 · 0 评论 -
Go+eBPF kprobe 禁止运行指定程序
本文详细介绍了如何使用Go语言结合eBPF技术,通过kprobe机制拦截Linux系统调用execve来禁止指定程序的运行。首先解释了项目背景与应用场景,如防止服务器重启、未经授权的文件下载等。接着深入探讨了实现原理,包括kprobe的工作方式和如何利用它监听execve调用,以及使用bpf_override_return API修改函数返回值以阻止程序执行。原创 2025-03-08 09:17:11 · 1556 阅读 · 0 评论 -
Go 语言 + libbpfgo 实战 eBPF 开发
本文介绍了如何使用Go语言结合libbpfgo进行eBPF开发, 并提供实战案例源代码下载和运行讲解。原创 2025-03-07 09:15:50 · 1302 阅读 · 0 评论