add cipher for transfer data
This commit is contained in:
parent
9ccddf3cf8
commit
f3d3a66d03
46
gost.go
46
gost.go
@ -28,6 +28,7 @@ const (
|
||||
type Gost struct {
|
||||
Laddr, Saddr, Proxy string
|
||||
Shadows bool // shadowsocks compatible
|
||||
Cipher bool
|
||||
}
|
||||
|
||||
func (g *Gost) Run() error {
|
||||
@ -80,20 +81,39 @@ func (g *Gost) cli(conn net.Conn) {
|
||||
lg.Logln(err)
|
||||
return
|
||||
}
|
||||
defer sconn.Close()
|
||||
|
||||
defer sconn.Close()
|
||||
laddr := sconn.(*net.TCPConn).LocalAddr().String()
|
||||
lg.Logln(laddr)
|
||||
|
||||
if _, err := sconn.Write([]byte{5, 1, 0}); err != nil {
|
||||
b := make([]byte, 8192)
|
||||
b[0] = 5
|
||||
b[1] = 1
|
||||
if gost.Cipher {
|
||||
b[2] = 0x88
|
||||
}
|
||||
|
||||
if _, err := sconn.Write(b[:3]); err != nil {
|
||||
lg.Logln(err)
|
||||
return
|
||||
}
|
||||
lg.Logln(">>>|", []byte{5, 1, 0})
|
||||
lg.Logln(">>>|", b[:3])
|
||||
|
||||
n, err := io.ReadFull(sconn, b[:2])
|
||||
if err != nil {
|
||||
lg.Logln(err)
|
||||
return
|
||||
}
|
||||
lg.Logln("<<<|", b[:n])
|
||||
|
||||
if b[1] == 0x88 {
|
||||
cipher, _ := shadowsocks.NewCipher("aes-256-cfb", "gost")
|
||||
sconn = shadowsocks.NewConn(sconn, cipher)
|
||||
}
|
||||
|
||||
if g.Shadows {
|
||||
lg.Logln("shadowsocks, aes-256-cfb")
|
||||
cipher, _ := shadowsocks.NewCipher("aes-256-cfb", "123456")
|
||||
cipher, _ := shadowsocks.NewCipher("aes-256-cfb", "gost")
|
||||
conn = shadowsocks.NewConn(conn, cipher)
|
||||
addr, port, extra, err := getRequest(conn)
|
||||
if err != nil {
|
||||
@ -133,15 +153,6 @@ func (g *Gost) cli(conn net.Conn) {
|
||||
return
|
||||
}
|
||||
|
||||
b := make([]byte, 8192)
|
||||
|
||||
n, err := io.ReadFull(sconn, b[:2])
|
||||
if err != nil {
|
||||
lg.Logln(err)
|
||||
return
|
||||
}
|
||||
lg.Logln("<<<|", b[:n])
|
||||
|
||||
n, err = conn.Read(b)
|
||||
if err != nil {
|
||||
lg.Logln(err)
|
||||
@ -262,12 +273,17 @@ func (g *Gost) srv(conn net.Conn) {
|
||||
|
||||
if b[0] == 5 { // socks5,NO AUTHENTICATION
|
||||
lg.Logln("|>>>", b[:n])
|
||||
if _, err := conn.Write([]byte{5, 0}); err != nil {
|
||||
method := b[2]
|
||||
if _, err := conn.Write([]byte{5, method}); err != nil {
|
||||
lg.Logln(err)
|
||||
return
|
||||
}
|
||||
lg.Logln("|<<<", []byte{5, 0})
|
||||
lg.Logln("|<<<", []byte{5, method})
|
||||
|
||||
if method == 0x88 {
|
||||
cipher, _ := shadowsocks.NewCipher("aes-256-cfb", "gost")
|
||||
conn = shadowsocks.NewConn(conn, cipher)
|
||||
}
|
||||
cmd, err := ReadCmd(conn)
|
||||
if err != nil {
|
||||
lg.Logln(err)
|
||||
|
1
main.go
1
main.go
@ -12,6 +12,7 @@ func init() {
|
||||
flag.StringVar(&gost.Proxy, "P", "", "proxy for forward")
|
||||
flag.StringVar(&gost.Saddr, "S", "", "the server that connecting to")
|
||||
flag.StringVar(&gost.Laddr, "L", ":8080", "listen address")
|
||||
flag.BoolVar(&gost.Cipher, "cipher", true, "cipher transfer data")
|
||||
flag.BoolVar(&gost.Shadows, "ss", false, "shadowsocks compatible")
|
||||
flag.BoolVar(&Debug, "d", false, "debug option")
|
||||
flag.Parse()
|
||||
|
Loading…
Reference in New Issue
Block a user