init
This commit is contained in:
65
examples/ssu/ssu.go
Normal file
65
examples/ssu/ssu.go
Normal file
@ -0,0 +1,65 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log"
|
||||
"net"
|
||||
"strconv"
|
||||
|
||||
"github.com/go-gost/gosocks5"
|
||||
ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ssuClient()
|
||||
}
|
||||
|
||||
func ssuClient() {
|
||||
addr, err := net.ResolveUDPAddr("udp", ":18338")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
laddr, _ := net.ResolveUDPAddr("udp", ":10800")
|
||||
conn, err := net.ListenUDP("udp", laddr)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cp, err := ss.NewCipher("chacha20", "123456")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cc := ss.NewSecurePacketConn(conn, cp, false)
|
||||
|
||||
raddr, _ := net.ResolveUDPAddr("udp", ":8080")
|
||||
msg := []byte(`abcdefghijklmnopqrstuvwxyz`)
|
||||
dgram := gosocks5.NewUDPDatagram(gosocks5.NewUDPHeader(0, 0, toSocksAddr(raddr)), msg)
|
||||
buf := bytes.Buffer{}
|
||||
dgram.Write(&buf)
|
||||
for {
|
||||
log.Printf("%# x", buf.Bytes()[3:])
|
||||
if _, err := cc.WriteTo(buf.Bytes()[3:], addr); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
b := make([]byte, 1024)
|
||||
n, adr, err := cc.ReadFrom(b)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("%s: %# x", adr, b[:n])
|
||||
}
|
||||
}
|
||||
|
||||
func toSocksAddr(addr net.Addr) *gosocks5.Addr {
|
||||
host := "0.0.0.0"
|
||||
port := 0
|
||||
if addr != nil {
|
||||
h, p, _ := net.SplitHostPort(addr.String())
|
||||
host = h
|
||||
port, _ = strconv.Atoi(p)
|
||||
}
|
||||
return &gosocks5.Addr{
|
||||
Type: gosocks5.AddrIPv4,
|
||||
Host: host,
|
||||
Port: uint16(port),
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user