熊喵君的博客

Thinking will not overcome fear but action will.

再看 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...

重拾 Linux 网络(四):NAT

NAT 与 内网穿透

0x00 前言 NAT(Network Address Translation,网络地址转换),也叫做网络掩蔽或者 IP 掩蔽。NAT 是一种网络地址翻译技术,主要是将内部的私有 IP 地址(private IP)转换成可以在公网使用的公网 IP(public IP) 本文介绍下笔者在项目中解决 UDP 透明代理的 NAT 实现及相关背景知识,以及内网穿透的原理及应用 NAT 分为...

使用 Golang 实现 SSH 和 SSHD(四)

git over sshd:如何实现一个 git-sshd-server

0x00 git over ssh 项目中需要实现 git 客户端的命令审计等功能,本文介绍下 git over ssh(d) 的原理及实现细节。具体的细节可以参考项目:gogs,本文依此项目为基础介绍下实现细节;此外还可以参考:git-Reference 本文的关键词是:git over ssh authorized_keys with forced_command git 支持的传输...

Golang 网络编程(三):tun 网络编程

golang tun 网络编程应用以及 gvisor 协议栈开发介绍

0x00 前言 前文介绍了 TUN 技术在透明代理中的使用,TUN 技术可应用于多种互联网场景: 透明代理技术 加速器 虚拟专用网络(VPN) 跨平台(OS)网络互联 0x01 基础知识 iobased OR fdbased 启动 TUN 网卡的方式如何选型?fdbased 和 iobased 的区别主要体现在数据的传输方式上 当使用 fdbase...

透明代理汇总:Transparent Proxy All In One

记录项目预研 / 开发的若干细节

0x00 前言 本文汇总下笔者在调研透明代理(Linux 下的全流量代理网关)的一些技术学习与分享 0x01 代理的技术方案比较 TProxy TProxy 是一种 Linux 内核模块,可以在 Linux 内核层面拦截网络数据并进行处理,从而实现透明代理。TProxy 可以在不改变源 IP 地址和端口的情况下,将数据包重定向到代理服务器(通常是监听在本机lo网卡上的进程)进...

Wireguard 实现原理与分析(一)

一个基于 golang 实现的 vpn-tunnel 分析

0x00 前言 WireGuard(简称 wg)是一种快速、现代、安全的 VPN 协议,基于 golang 的开源地址 在此,本文探讨其 linux 下的配置和实现等细节 0x01 工作原理 WireGuard 以 UDP 实现,但是运行在 IP 层(即 ip-over-udp)。每个 Peer 都会生成一个 wg0 虚拟网卡,同时服务端会在物理网卡上监听 UDP 51820 端...

重拾 Linux 网络(三):透明代理中的路由策略

0x00 前言 不要把路由表和 iptables 混淆,路由表决定如何传输数据包,而 iptables 决定是否传输数据包,他俩的职责不一样;最近印象较深的一句话 0x01 iptables/router/ip rule 区别 ip route(即 route -n),iproute2 提供的命令 ip rule:策略路由(最重要),定义了数据包路由查询的规则 ...

重拾 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 四表五链中的五链)注册了一些钩子函数,用来截取数据...