gost_software/gost/cli/cli.go
2017-07-21 18:14:31 +08:00

67 lines
1.4 KiB
Go

package main
import (
"bufio"
"context"
"crypto/tls"
"log"
"net/http"
"net/http/httputil"
"net/url"
"github.com/ginuerzh/gost/gost"
)
func init() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
gost.Debug = true
}
func main() {
chain := gost.NewChain(
gost.Node{
Addr: "127.0.0.1:1080",
Client: gost.NewClient(
gost.HTTPConnector(url.UserPassword("admin", "123456")),
gost.TCPTransporter(),
),
},
gost.Node{
Addr: "172.24.222.54:8338",
Client: gost.NewClient(
gost.ShadowConnector(url.UserPassword("chacha20", "123456")),
gost.TCPTransporter(),
),
},
gost.Node{
Addr: "172.24.222.54:8080",
Client: gost.NewClient(
gost.SOCKS5Connector(url.UserPassword("cmdsh", "cmdsh123456")),
gost.TCPTransporter(),
),
},
)
conn, err := chain.Dial(context.Background(), "baidu.com:443")
if err != nil {
log.Fatal(err)
}
conn = tls.Client(conn, &tls.Config{InsecureSkipVerify: true})
req, err := http.NewRequest(http.MethodGet, "https://www.baidu.com", nil)
if err != nil {
log.Fatal(err)
}
if err := req.Write(conn); err != nil {
log.Fatal(err)
}
resp, err := http.ReadResponse(bufio.NewReader(conn), req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
rb, _ := httputil.DumpRequest(req, true)
log.Println(string(rb))
rb, _ = httputil.DumpResponse(resp, true)
log.Println(string(rb))
}