<( ̄︶ ̄)↗[GO!] A shadowsocks implementation in pure go
![GoDoc](https://camo.githubusercontent.com/ef21b63d5dbf76c471bae042f1d7836c3ab245e75c97efea7732fb830f2307f9/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f596565322f736861646f77736f636b732d676f3f7374617475732e737667)
- aes-128-cfb
- aes-192-cfb
- aes-256-cfb
- aes-128-ctr
- aes-192-ctr
- aes-256-ctr
- camellia-128-cfb
- camellia-192-cfb
- camellia-256-cfb
- aes-128-gcm
- aes-192-gcm
- aes-256-gcm
- chacha20-ietf-poly1305
package main
import (
"github.com/Yee2/shadowsocks-go"
"os"
"io"
"fmt"
"log"
)
func main() {
t, err := shadowsocks.NewTunnel("aes-256-gcm", "123456")
if err != nil {
log.Fatalln(err)
}
r, err := os.Open("origin.txt")
if err != nil {
log.Fatalln(err)
}
defer r.Close()
out := "origin.txt.encrypted"
w, err := os.OpenFile(out, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer w.Close()
we, err := t.Shadow(w)
if err != nil {
log.Fatalln(err)
}
_, err = io.Copy(we, r)
if err != nil {
log.Fatalln(err)
}
fmt.Println("文件加密保存到 : ", out)
}
package main
import (
"github.com/Yee2/logf"
"github.com/Yee2/shadowsocks-go"
"log"
"net"
)
func main() {
tunnel, err := shadowsocks.NewTunnel("aes-256-gcm","123456")
if err != nil {
log.Fatalln(err)
}
listener, err := net.Listen("tcp", "0.0.0.0:8366")
if err != nil {
log.Fatalln(err)
}
defer listener.Close()
for {
conn, err := listener.Accept()
if err != nil {
println(err)
continue
}
go func() {
defer conn.Close()
surface, err := tunnel.Shadow(conn)
if err != nil {
println(err)
return
}
err = shadowsocks.Handle(surface)
if err != nil {
logf.Logf("%s", err)
}
}()
}
}