update
This commit is contained in:
parent
302767f68a
commit
8d30eb1a72
45
client.go
45
client.go
@ -128,6 +128,7 @@ func handleSocks5(conn net.Conn, sconn net.Conn) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Println(req)
|
||||||
|
|
||||||
switch req.Cmd {
|
switch req.Cmd {
|
||||||
case gosocks5.CmdConnect, gosocks5.CmdBind:
|
case gosocks5.CmdConnect, gosocks5.CmdBind:
|
||||||
@ -162,28 +163,34 @@ func handleSocks5(conn net.Conn, sconn net.Conn) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
addr.Port = req.Addr.Port
|
cliTunnelUDP(uconn, conn)
|
||||||
raddr, err := net.ResolveUDPAddr("udp", addr.String())
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
cliTunnelUDP(raddr, uconn, conn)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func cliTunnelUDP(raddr net.Addr, uconn *net.UDPConn, conn net.Conn) {
|
func cliTunnelUDP(uconn *net.UDPConn, conn net.Conn) {
|
||||||
go func() {
|
var raddr *net.UDPAddr
|
||||||
udp, err := gosocks5.ReadUDPDatagram(uconn)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
udp.Header.Rsv = uint16(len(udp.Data))
|
|
||||||
|
|
||||||
if err := udp.Write(conn); err != nil {
|
go func() {
|
||||||
log.Println(err)
|
b := make([]byte, 65797)
|
||||||
return
|
for {
|
||||||
|
n, addr, err := uconn.ReadFromUDP(b)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
raddr = addr
|
||||||
|
r := bytes.NewBuffer(b[:n])
|
||||||
|
udp, err := gosocks5.ReadUDPDatagram(r)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
udp.Header.Rsv = uint16(len(udp.Data))
|
||||||
|
log.Println("r", raddr.String(), udp.Header)
|
||||||
|
|
||||||
|
if err := udp.Write(conn); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -193,10 +200,10 @@ func cliTunnelUDP(raddr net.Addr, uconn *net.UDPConn, conn net.Conn) {
|
|||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Println("w", udp.Header)
|
||||||
udp.Header.Rsv = 0
|
udp.Header.Rsv = 0
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
udp.Write(buf)
|
udp.Write(buf)
|
||||||
|
|
||||||
if _, err := uconn.WriteTo(buf.Bytes(), raddr); err != nil {
|
if _, err := uconn.WriteTo(buf.Bytes(), raddr); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
|
31
server.go
31
server.go
@ -115,34 +115,37 @@ func srvHandle(conn net.Conn, method uint8) {
|
|||||||
func srvTunnelUDP(conn net.Conn, uconn *net.UDPConn) {
|
func srvTunnelUDP(conn net.Conn, uconn *net.UDPConn) {
|
||||||
go func() {
|
go func() {
|
||||||
b := make([]byte, 65535)
|
b := make([]byte, 65535)
|
||||||
n, addr, err := uconn.ReadFromUDP(b)
|
for {
|
||||||
if err != nil {
|
n, addr, err := uconn.ReadFromUDP(b)
|
||||||
log.Println(err)
|
if err != nil {
|
||||||
return
|
log.Println(err)
|
||||||
}
|
return
|
||||||
|
}
|
||||||
|
|
||||||
udp := gosocks5.NewUDPDatagram(
|
udp := gosocks5.NewUDPDatagram(
|
||||||
gosocks5.NewUDPHeader(uint16(n), 0, ToSocksAddr(addr)), b[:n])
|
gosocks5.NewUDPHeader(uint16(n), 0, ToSocksAddr(addr)), b[:n])
|
||||||
if err := udp.Write(conn); err != nil {
|
log.Println("r", udp.Header)
|
||||||
log.Println(err)
|
if err := udp.Write(conn); err != nil {
|
||||||
return
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
ud, err := gosocks5.ReadUDPDatagram(conn)
|
udp, err := gosocks5.ReadUDPDatagram(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
log.Println("w", udp.Header)
|
||||||
addr, err := net.ResolveUDPAddr("udp", ud.Header.Addr.String())
|
addr, err := net.ResolveUDPAddr("udp", udp.Header.Addr.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
continue // drop silently
|
continue // drop silently
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := uconn.WriteToUDP(ud.Data, addr); err != nil {
|
if _, err := uconn.WriteToUDP(udp.Data, addr); err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user