拓展golang代理的边界 proxyclient
前言
本文是rem发布前的前菜, 是在实现rem过程中的附带产物,但因其可以被使用在大量其他组件中, 故将其抽象出来作为独立的库使用。
TLNR:
repo: https://github.com/chainreactors/proxyclient
wiki: https://chainreactors.github.io/wiki/libs/proxyclient/
golang 代理的背景知识
众所周知, golang上有着远超其他任意语言的网络相关的生态库。 各种应用也层出不穷,从安全领域常用的iox,frp,nps 到网络代理gost, xray, v2ray, 以及相对底层的网络协议实现库如kcp,quic, rawpacket, 还有最重要的标准库提供的密码学库(crypto和tls)及其优雅的抽象。
越来越多的扫描器也都基于golang实现,这也包括了我在多年前编写的扫描器gogo。 在gogo开发的早期我对使用代理去扫描是有偏见的,这源于我对网络协议和golang设计上的了解不够深入,还有一个重要原因是标准库库中的proxy提供了很好的抽象, 但是在具体实现上略显混乱。 这也导致了很长一段时间gogo的代理扫描实际上是误用了,让我一直以为只有socks5协议能代理socket。