是的,一年半时间,笔者的首个7000星的GitHub开源项目来了,它就是eCapture旁观者。未来一年,争取过万星。
eBPF
eBPF挂钩TC egress时,被TCP Checksum搞死了
我最近也在尝试用eBPF TC类型程序,挂钩`egress`网络包,修改IP包、TCP包内容,实现路由跟踪的功能。除了eBPF验证器的奇葩问题外,剩下的就是`skb_buff`修改后,被客户端内核丢弃、中间路由丢弃、服务端内核丢弃的各种问题,头发那是一把一把的掉。幸运的是,我找到了这篇文章《Checksum-or-fxxk-up》,特意转来给大家分享。
golang uretprobe的崩溃与模拟实现
云原生架构下,服务的可观测性几乎是标配。K8S生态中,大量微服务都是用Golang写的,在观测Golang的函数返回值时,大概率会发生进程崩溃的情况。也就是说Go uprobe观测一切正常,但Go uretprobe观测,几乎都触发崩溃,今天,笔者来带大家了解崩溃原因,一起探讨解决方案。
如何给eBPF程序写单元测试
eBPF程序还很年轻,周边质量建设体系还刚起步,常用于Linux内核上的监控跟踪,本身比较底层,测试成本很高。对于常写eBPF的同学,特别头疼的是快速迭代的项目,如何保证功能正常。如何给eBPF程序写单元测试呢?
eCapture旁观者支持Golang tls/https加密明文捕获
云原生生态中,golang语言开发的项目越来越多,例如Docker和K8s、etcd等。作为SRE、RD,偶尔需要在生产环境抓网络通讯包,用来分析排查故障。很多时候,都是tls/https加密协议,如何在不重启业务保留现场,不改为自定义CA证书的情况下,分析明文通讯内容呢?
如何使用Delve和eBPF更快地调试Go程序
Delve 的目标是为开发人员提供愉快且高效的 Go 调试体验。因此,本文重点介绍了我们如何优化函数跟踪子系统,以便您可以更快地检查程序并找到根本原因分析。Delve 的跟踪实现有两个不同的后端,一个是基于 ptrace 的,另一个使用 eBPF。
eCapture支持boringssl TLS 1.3明文数据包捕获
一个多月前,有网友反馈Android上,TLS 1.2明文网络包正常捕获,而1.3的密钥无法捕获。笔者得知这个问题后,花了几个周末时间修复、添加了这个功能。在这期间,笔者工作繁忙以及感染新冠,整个功能拖了1个月 才完成。精力与体力,支撑起来越来越吃力。搞开源,全是靠爱发电,实属不易。
使用 eBPF-TC 在内核中安全地改变数据包
使用eBPF实现基于DWARF的堆栈遍历
我们是 BPF 的忠实信徒,有很多原因。从广义上讲,它允许 Linux 内核以更高的安全保证和更低的学习门槛进行编程。
在 BPF 中开发分析器非常有意义,因为一旦实现了堆栈遍历机制,我们就可以利用 perf 子系统来获取有关 CPU 周期、指令、L3 缓存未命中或我们机器中可用的任何其他性能计数器的样本。它还有助于开发其他工具,如分配跟踪器、off-CPU分析器等。
实战eBPF kprobe函数插桩
说起eBPF大家都不陌生,在实际使用时,基于各种需求场景,kprobe的出场机会比较多。在eBPF kprobe实战过程中,你遇到过因为业务需求kprobe 需要获取多个参数的场景吗?如果你也纠结过如何取得超过6个的参数,本文尝试带你一起揭开这层面纱。