### 前言
命名-hoz, 这个代理只是为了加深学习对TCP/IP,HTTP,SOCKS等编程的理解。放到网上也是想有个开源项目,仅供学习交流,平时自己的集成环境也方便用代理访问库文件。**切勿用于其他违法商业用途** :bomb:
### 主要代码
HTTP和SOCKS协议,这里就不说了,网上也用很多的详解。这里介绍下是怎么包装数据的, 用的或与运算,简单高效
```go
type OORR struct {
password []byte
index int
remainder []byte
}
func NewOor(key []byte) *OORR {
or := new(OORR)
or.password = key
or.index = len(key) - 1
if or.index > 0 {
for i := 0; i < 32*1024; i++ {
or.remainder = append(or.remainder, or.password[i%or.index])
}
}
return or
}
func (or *OORR) Encrypt(src []byte) ([]byte, error) {
length := len(src)
for i, b := range src {
if or.index > 0 {
src[i] = b ^ byte(i) ^ or.remainder[i]
} else {
src[i] = b ^ byte(i)
}
}
head := make([]byte, 4)
binary.BigEndian.PutUint32(head, uint32(length))
data := src[:0]
data = append(head, src...)
return data, nil
}
func (or *OORR) Decrypt(src []byte) ([]byte, error) {
for i, b := range src {
if or.index > 0 {
src[i] = b ^ byte(i) ^ or.remainder[i]
} else {
src[i] = b ^ byte(i)
}
}
return src, nil
}
```
#### 加密扩展
如果需要自己实现加解密,可以实现这三个接口,参考cipher/oor.go,然后再server.go 添加你的加密解密实现。
*1.0.4 版本支持oor, salsa20, ase*
```go
pkg.PackageReader
pkg.PackageWriter
cipher.Cipher
```
#### 亲测好用
>实际测试情况,1g1核的机子,一直看高清视频的情况下,CPU占用在0.5%上下,内存在1%,播放4K视频时,CPU大一些,内存变化不大。轻快,好用。换个说法就是,你只需要购一台1核心和128M内存及以上的机子就可以愉快的玩耍了。需要的拿走,记得star哦!<br>**本代码仅供学习交流测试使用**
![image.png](https://static.studygolang.com/190911/690ac345f312a8b58b1b8cc61f26e699.png)
#### 学习总结
懂的越多,不懂的就越多
#### Github 代码
>><u>[A light weight fast HTTP & SOCKS5 Proxy](https://github.com/helloh2o/hoz "hoz")</u><br>
有疑问加站长微信联系(非本文作者)