熊喵君的博客

Thinking will not overcome fear but action will.

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 充当任务...

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

DNS 劫持代理 review 与 CoreDNS 分析

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

DPI with go:构建一个流量分析系统

golang 的包处理:gopacket

0x00 前言 项目中需要实现一些基本的流量分析功能,借用了 gopacket 库,该库是 libpcap 和 npcap 的 go 封装,提供了更方便的 go 语言操作接口。通常网络抓包有以下几个步骤: 枚举主机上网络设备的接口 针对某一网口进行抓包 解析数据包的 mac 层、ip 层、tcp/udp 层字段等 ip 分片重组,或 tcp 分段重组成上层协议如 ht...

Pprof 调试经验汇总

0x00 前言 0x01 DEBUG 汇总 调用图 安装 yum install graphviz go tool pprof main http://localhost:8000/debug/pprof/heap 或者 goroutine,进入命令行 输入 svg 命令即可保存 火焰图 安装 FlameGraph,如下 安装 go-tor...

frp穿透项目:设计与分析(一)

0x00 前言 架构 参考 frp 内网穿透

Envoy 应用入门(TODO)

0x00 前言 Envoy 是一个开源的边缘服务代理,也是 Istio Service Mesh 默认的数据平面,专为云原生应用程序设计。与 HAProxy 以及 Nginx 等传统 Proxy 依赖静态配置文件来定义各种资源以及数据转发规则不同,Envoy 几乎所有配置都可以通过订阅来动态获取。对应的发现服务以及各种各样的 API 统称为 xDS。Envoy 与 xDS 之间通过 P...

重拾 Linux 网络(五):TCP/IP 协议栈回顾

工作中遇到的那些协议栈相关的知识点汇总(基于 google-netstack 的讨论)

0x00 前言 本文汇总下笔者在近期工作中遇到的与 TCP/IP 协议栈相关的知识点汇总 0x01 链路层 目的 mac 地址:6 字节物理地址 源 mac 地址:6 字节物理地址 数据包协议类型: 为 0x8000 时为 IPv4 协议包,为 0x8060 时,后面为 ARP 协议包 数据包:网卡输送能力上限 MTU(1500 字节), 对网络层 ip 协...

再看 io.Copy

梳理一下容易被遗漏的细节问题

0x00 前言 前文 神奇的 Golang-IO 包 描述过 io.Copy 系列方法的一般使用,最近在做流量代理项目中,遇到几个不错的 issue: Behavior of tun2socks with closed TCP ports #222 Fix: tcp relay [Bug] TCP relay is incorrect Fix: wrap net.C...