熊喵君的博客

Thinking will not overcome fear but action will.

重拾 Linux 网络(二):网卡 / 虚拟网卡、tap/tun 那些事

0x00 前言 本文回顾下网络的基础知识,主要是网卡、虚拟网卡,以及非常重要的 tap/tun 开发模式及应用构建相关。 0x01 物理网卡 && 虚拟网卡 物理网卡 物理网卡设备的工作流程如下: 所有物理网卡收到的包会交给内核的 Network Stack 处理,然后通过 Socket API 通知给用户程序。 虚拟网卡 相比于物理网卡负责内核网...

MITM:中间人机制 review

如何优雅的实现 https mitm(透明劫持)

0x00 前言 本文探讨下 HTTPS 劫持这个话题,一些常见的网络调试工具 fiddler、charles、surge、wireshark 等,或多或少都是利用了 HTTPS 的 MITM 攻击来实现的。HTTPS 劫持的核心原理是不安全的 CA(或者是非权威 CA) 可以给任何网站 or 域名进行 CA 签名,TLS 服务端解密需要服务端私钥和服务段证书,然而这个不安全的 CA 可...

重拾 Linux 网络(一):iptables

如何利用 iptables 构建透明代理

0x00 前言 最新笔者在研究全流量代理,本文回顾一下 iptables 的原理,先回顾下 netfilter/iptables 的基础概念: iptables 可以参考下面若干文章: IPtables,文章合集,非常全面了 重温 iptables Netfilter 模块,在网络层的五个位置(也就是 iptables 四表五链中的五链)注册了一些钩子函数,用来截取数据...

Kubernetes 应用改造(九):CRD && Controller && Operator 入门

0x00 前言 先列举几个概念: CRD(Custom Resource Definition) Controller Operator:Operator 是一种封装、部署和管理 kubernetes 应用的方法 Operator的应用场景 Operator 是由 kubernetes 自定义资源(CRD, Custom Resource Definition)和控制器(...

helm 入门与应用:Kubernetes 包管理器

使用 helm 部署 kubernetes 应用(helm V3)

0x00 前言 Helm 是 Kubernetes 的包管理工具,类似于 Linux 下的包管理工具如 yum 等。通过 helm 可以将打包好的 yaml 文件部署到 Kunernetes 集群 Helm 的应用场景 将所有的 yaml 文件(deployment、Service、Ingress 等等)进行整体的管理,实现 yaml 文件的高效复用。这里的高效复用是指 yaml 文件...

Sync.Pool 应用与分析(续)

Golang sync.Pool 源码分析

0x00 前言 前文 Golang 中的 sync.Pool 使用 介绍了 sync.Pool 的使用及若干细节。 sync.Pool 是并发安全且可伸缩的,常用于存放可复用的对象的一个容器,以减少反复创建对象带来的开销,这里需要注意,Pool 是用于存放对象的,不建议用来缓存一些有状态的对象(如长连接等)或数据等持久存储对象,因为 Pool 中的内容是会随着 GC 而被回收。 ...

bytes.Buffer 源码分析及应用

0x00 前言 本文分析下 golang 标准库 bytes.Buffer 的实现(本文基于 go1.17 版本的实现分析) 笔者在给 ssh 网关增加终端解析功能中大量使用了 bytes.Buffer 这个结构,bytes.Buffer 是 Golang 标准库 []byte 缓冲区(流式缓冲区),具有读写方法和可变大小的字节存储功能。缓冲区的零值是一个待使用的空缓冲区。可以持续向...

go-redis/cache 库分析与使用

0x00 前言 go-redis/cache 是一个小而精悍的项目,实现了本地缓存配合 redis(远端缓存)的高性能 cache,可借鉴的地方两点(以 V8 版本分析): 缓存CRUD的操作语义(本地 / 远程) singleflight 机制的应用 如果value比较大, 可以考虑启用压缩 如果缓存数据量比较大, 并且对性能有要求的场景, 可以尝试使用msgpack代...

Golang 闭包与递归:介绍与应用场景

Golang closure

0x00 前言 笔者近期项目中,实现了通过 JSON 协议模拟会话目录及文件的树型结构的操作,用到了 Golang 的递归与闭包。闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数(方法),先看例子: func outer(x int) func(int) int { return func(y int) int { ...

Golang 并发:如何优雅实现并发 goroutine 若干细节

Golang errorgroup 应用(续)

0x00 前言 0x01 SizedWaitGroup机制 SizedWaitGroup在sync.WaitGroup基础上增加了并发启动的goroutines的数量限制特性,即SizedWaitGroup增加了限制同时启动例程的最大数量的功能,使用方法如下: import ( "fmt" "math/rand" "time" ...