熊喵君的博客

Thinking will not overcome fear but action will.

golang eBPF 开发入门(三)

eBPF 中的 Maps 数据结构分析与应用

0x00 前言 上文 介绍了 ebpf 的内核态 / 用户态的通信示例,本文关注三个问题:为什么要使用 maps?maps 使用的一般场景?maps 的基本结构及实现原理。BPF Map 是内核空间和用户空间之间用于数据交换、信息传递的桥梁。是 eBPF 程序中使用的主要数据结构。BPF Map 本质上是以键 / 值方式存储在内核中的数据结构,在内核空间的程序创建 BPF Map 并返...

golang eBPF 开发入门(二)

kprobe/uprobe/tracepoint 开发实践

0x00 前言 本文专注于最右侧的技术 0x01 kprobe/uprobe/tracepoint 技术 tracepoint 0x02 kprobe 基础实践 开发步骤 1、准备对应版本的 kernel 内核源码,在对系统调用植入探针的过程中,需要了解对应函数的参数和返回值定义 uname -a #5.15.0-83-generic # 确认目标设备的 linux...

gopsutil 使用与分析

一个跨平台的采集库 && windows API 实现

0x00 前言 gopsutil 屏蔽了各个系统之间的差异,具有非常好的可移植性 本文基于 v4.24.7 分析 0x01 应用实战 先引入一个问题,已知 srcip、srcport,如何查找到该信息对应(占用)的进程名字(pid)?思路大致如下: 通过 srcip、srcport 获取进程 pid 通过 pid 获取进程名(进程路径) Linux 实现 Windows...

ego/gocache:一个缓存管理通用工具库的实现

0x00 前言 gocache 是一个可扩展的缓存库(非缓存实现) 作为上层封装了众多开源 cache 库 / redis 的实现 缓存语义的包装,比如 chain cache,loadable cache 等 支持 cache 类通用指标的采集 版本分析基于 lib/v4.1.6 0x01 公共接口 Store adapters:存储适配器 该 interfa...

CS144:一个轻量级 TCP 重组器的实现与分析

0x00 前言 CS144 课程提供了一个用户态 TCP 协议的简单实践,先回顾下 TCP 的若干特点,为了最大限度的保证传输可靠: 1、可靠性保证 校验和,TCP 每个报文都有校验和字段,防止数据丢失或出错 序列化和确认号,保证每个序号的字节都交付,解决丢失、重复等问题 超时重传,对于超时未能确认的报文,TCP 会重传这些包,确保数据达到对端 拥塞控制等等 ...

GOST 应用与分析(一)(未完待续)

GOST 项目的介绍及 TUNNEL 实现分析

0x00 前言 gost 是一个非常有意思的项目,在笔者看来,像是乐高积木一样的代理连接器(多机端口转发器),其核心概念是四大模块: Service:Service 是指一个网络服务,它可以是一个服务器或者一个客户端。每一个 service 都有一个特定的网络地址和网络协议,如 HTTP,SOCKS5 等。GOST 通过 service 来接收和发送网络数据 Node:No...

Etcd 工程解析(一)

整体模块拆解

0x00 前言 前文 Raft 协议分析与实战(理论篇) 大致介绍了 Raft 算法的理论基础,本系列分析下 Etcd 的工程化实现,主要包括: 主要模块拆分 存储的实现 Raft 库的实现 Etcd-Server 实现 本文主要基于 V3 版本分析,版本号 3.1.10 Etcd 的整体架构 0x01 模块拆分 下图展示了 etcd 如何处理一个...

GoZero 组件分析:executors(批处理组件)

0x00 前言 现网中可能会遇到如下场景,批量提交一批任务(如 MYSQL 语句),或是从 kafka 等队列中批量消费一批数据;Go 的现有库没有诸如灵活定义作业运行、批量提交任务减少小任务提交等特性,当然可以借助于线程池来解决,不过 goZero 给出了一套更为轻量化的实现:executors 本文分析下 executors 组件实现,在 goZero 中,executors 充当任务...

golang eBPF 开发入门(一)

0x00 前言 eBPF(Extended Berkeley Packet Filter)是一种基于内核的轻量级虚拟机,它允许用户在内核中运行自定义的程序,以实现对系统事件的实时监控和分析。eBPF 程序通常以 C 编写,并通过专用的编译器将其编译为 eBPF 字节码。然后,这些字节码将被加载到内核中,并在 eBPF 虚拟机上运行 eBPF 程序运行在内核态 (kernel),无需重...

重拾 Linux 网络(六):DNS 劫持与代理

DNS 劫持代理 review

0x00 前言 本文是项目中的 DNS 相关开发工作记录 如何合适的实现 DNS 查询缓存? DOH、DOT 实现 如何优雅的实现一个 DNS 代理 透明网关中的 DNS 机制、DNS 分流机制等 0x01 基础 先回顾一下 DNS 解析的基础流程,如下图: DNS 解析流程 常用的 public DNS(UDP) 8.8.8.8:Goo...