mirror of https://github.com/ginuerzh/gost
11 changed files with 482 additions and 38 deletions
@ -0,0 +1,53 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"flag" |
||||
|
"log" |
||||
|
"net" |
||||
|
"time" |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
concurrency int |
||||
|
saddr string |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
||||
|
|
||||
|
flag.StringVar(&saddr, "S", ":18080", "server address") |
||||
|
flag.IntVar(&concurrency, "c", 1, "Number of multiple echo to make at a time") |
||||
|
flag.Parse() |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
for i := 0; i < concurrency; i++ { |
||||
|
go udpEchoLoop() |
||||
|
} |
||||
|
select{} |
||||
|
} |
||||
|
|
||||
|
func udpEchoLoop() { |
||||
|
addr, err := net.ResolveUDPAddr("udp", saddr) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
conn, err := net.DialUDP("udp", nil, addr) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
|
||||
|
msg := []byte(`abcdefghijklmnopqrstuvwxyz`) |
||||
|
for { |
||||
|
if _, err := conn.Write(msg); err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
b := make([]byte, 1024) |
||||
|
_, err := conn.Read(b) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
// log.Println(string(b[:n]))
|
||||
|
time.Sleep(100 * time.Millisecond) |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,56 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"flag" |
||||
|
"log" |
||||
|
"net/url" |
||||
|
"time" |
||||
|
|
||||
|
"github.com/ginuerzh/gost/gost" |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
laddr, faddr string |
||||
|
quiet bool |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
||||
|
|
||||
|
flag.StringVar(&laddr, "L", ":18080", "listen address") |
||||
|
flag.StringVar(&faddr, "F", ":8080", "forward address") |
||||
|
flag.BoolVar(&quiet, "q", false, "quiet mode") |
||||
|
flag.BoolVar(&gost.Debug, "d", false, "debug mode") |
||||
|
flag.Parse() |
||||
|
|
||||
|
if quiet { |
||||
|
gost.SetLogger(&gost.NopLogger{}) |
||||
|
} |
||||
|
} |
||||
|
func main() { |
||||
|
udpForwardServer() |
||||
|
} |
||||
|
|
||||
|
func udpForwardServer() { |
||||
|
s := &gost.Server{} |
||||
|
ln, err := gost.UDPForwardListener(laddr, time.Second*3) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
h := gost.UDPForwardHandler( |
||||
|
faddr, |
||||
|
gost.ChainHandlerOption(gost.NewChain(gost.Node{ |
||||
|
Protocol: "socks5", |
||||
|
Transport: "tcp", |
||||
|
Addr: ":11080", |
||||
|
User: url.UserPassword("admin", "123456"), |
||||
|
Client: &gost.Client{ |
||||
|
Connector: gost.SOCKS5Connector( |
||||
|
url.UserPassword("admin", "123456"), |
||||
|
), |
||||
|
Transporter: gost.TCPTransporter(), |
||||
|
}, |
||||
|
})), |
||||
|
) |
||||
|
log.Fatal(s.Serve(ln, h)) |
||||
|
} |
||||
@ -0,0 +1,44 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"flag" |
||||
|
"log" |
||||
|
"net" |
||||
|
) |
||||
|
|
||||
|
var ( |
||||
|
laddr string |
||||
|
) |
||||
|
|
||||
|
func init() { |
||||
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
||||
|
|
||||
|
flag.StringVar(&laddr, "L", ":8080", "listen address") |
||||
|
flag.Parse() |
||||
|
} |
||||
|
func main() { |
||||
|
udpEchoServer() |
||||
|
} |
||||
|
|
||||
|
func udpEchoServer() { |
||||
|
addr, err := net.ResolveUDPAddr("udp", laddr) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
conn, err := net.ListenUDP("udp", addr) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
|
||||
|
for { |
||||
|
b := make([]byte, 1024) |
||||
|
n, raddr, err := conn.ReadFromUDP(b) |
||||
|
if err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
if _, err = conn.WriteToUDP(b[:n], raddr); err != nil { |
||||
|
log.Fatal(err) |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue