Commit 8d30eb1a authored by rui.zheng's avatar rui.zheng

update

parent 302767f6
...@@ -128,6 +128,7 @@ func handleSocks5(conn net.Conn, sconn net.Conn) { ...@@ -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) { ...@@ -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) {
var raddr *net.UDPAddr
go func() { go func() {
udp, err := gosocks5.ReadUDPDatagram(uconn) b := make([]byte, 65797)
if err != nil { for {
log.Println(err) n, addr, err := uconn.ReadFromUDP(b)
return if err != nil {
} log.Println(err)
udp.Header.Rsv = uint16(len(udp.Data)) 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 { if err := udp.Write(conn); err != nil {
log.Println(err) log.Println(err)
return return
}
} }
}() }()
...@@ -193,10 +200,10 @@ func cliTunnelUDP(raddr net.Addr, uconn *net.UDPConn, conn net.Conn) { ...@@ -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
......
...@@ -115,34 +115,37 @@ func srvHandle(conn net.Conn, method uint8) { ...@@ -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(
gosocks5.NewUDPHeader(uint16(n), 0, ToSocksAddr(addr)), b[:n]) udp := gosocks5.NewUDPDatagram(
if err := udp.Write(conn); err != nil { gosocks5.NewUDPHeader(uint16(n), 0, ToSocksAddr(addr)), b[:n])
log.Println(err) log.Println("r", udp.Header)
return if err := udp.Write(conn); err != nil {
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
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment