148 lines
2.8 KiB
Go
148 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"log"
|
|
|
|
"net/url"
|
|
|
|
"sync"
|
|
|
|
"github.com/ginuerzh/gost/gost"
|
|
)
|
|
|
|
func init() {
|
|
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
|
gost.Debug = true
|
|
}
|
|
|
|
func main() {
|
|
wg := sync.WaitGroup{}
|
|
wg.Add(1)
|
|
go httpServer(&wg)
|
|
wg.Add(1)
|
|
go socks5Server(&wg)
|
|
wg.Add(1)
|
|
go tlsServer(&wg)
|
|
wg.Add(1)
|
|
go shadowServer(&wg)
|
|
wg.Add(1)
|
|
go wsServer(&wg)
|
|
wg.Add(1)
|
|
go wssServer(&wg)
|
|
wg.Add(1)
|
|
go kcpServer(&wg)
|
|
wg.Wait()
|
|
}
|
|
|
|
func httpServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.HTTPHandler(
|
|
gost.UsersHandlerOption(url.UserPassword("admin", "123456")),
|
|
))
|
|
ln, err := gost.TCPListener(":8080")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func socks5Server(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.SOCKS5Handler(
|
|
gost.UsersHandlerOption(url.UserPassword("admin", "123456")),
|
|
gost.TLSConfigHandlerOption(&tls.Config{Certificates: []tls.Certificate{cert}}),
|
|
))
|
|
ln, err := gost.TCPListener(":1080")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func shadowServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.ShadowHandler(
|
|
gost.UsersHandlerOption(url.UserPassword("chacha20", "123456")),
|
|
))
|
|
ln, err := gost.TCPListener(":8338")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func tlsServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.HTTPHandler(
|
|
gost.UsersHandlerOption(url.UserPassword("admin", "123456")),
|
|
))
|
|
cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
ln, err := gost.TLSListener(":1443", &tls.Config{Certificates: []tls.Certificate{cert}})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func wsServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.HTTPHandler(
|
|
gost.UsersHandlerOption(url.UserPassword("admin", "123456")),
|
|
))
|
|
ln, err := gost.WSListener(":8000", nil)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func wssServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.HTTPHandler(
|
|
gost.UsersHandlerOption(url.UserPassword("admin", "123456")),
|
|
))
|
|
|
|
cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
ln, err := gost.WSSListener(":8443", &gost.WSOptions{TLSConfig: &tls.Config{Certificates: []tls.Certificate{cert}}})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|
|
|
|
func kcpServer(wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
s := &gost.Server{}
|
|
s.Handle(gost.HTTPHandler())
|
|
ln, err := gost.KCPListener(":8388", nil)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Fatal(s.Serve(ln))
|
|
}
|