熊喵君的博客

Thinking will not overcome fear but action will.

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" ...

Singleflight:原理与应用(续)

如何安全且正确的使用 singleflight

0x00 前言 前文 微服务中的缓存(一):Cache 使用与优化 介绍过 singleflight 的应用场景之解决缓存失效时的并发穿透场景。本文就笔者项目中对 Singleflight 机制的实际使用再做一次总结。先回顾下 singleflight 的定义: SingleFlight 是 Go 开发组提供的一个扩展并发原语。它的作用是在处理多个 goroutine 同时调用同一个函数的...