diff --git a/cmd/main.go b/cmd/main.go index f5a710a..3e07054 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -80,7 +80,7 @@ func init() { // Proxy args.ProxyServer = flag.String("proxyServer", "", "Proxy server address") - args.UdpTimeout = flag.Duration("udpTimeout", 60*time.Second, "UDP session timeout") + args.UdpTimeout = flag.Duration("udpTimeout", 30*time.Second, "UDP session timeout") } func main() { diff --git a/proxy/socks/client.go b/proxy/socks/client.go index 1ac6bab..19dfbfd 100755 --- a/proxy/socks/client.go +++ b/proxy/socks/client.go @@ -16,7 +16,12 @@ func Dial(proxy, target string) (net.Conn, error) { return nil, fmt.Errorf("%s connect error", proxy) } - if _, err := ClientHandshake(c, ParseAddr(target), CmdConnect); err != nil { + targetAddr := ParseAddr(target) + if targetAddr == nil { + return nil, fmt.Errorf("target address parse error") + } + + if _, err := ClientHandshake(c, targetAddr, CmdConnect); err != nil { return nil, err } return c, nil @@ -39,7 +44,13 @@ func DialUDP(proxy, target string) (_ net.PacketConn, _ net.Addr, err error) { } }() - bindAddr, err := ClientHandshake(c, ParseAddr(target), CmdUDPAssociate) + targetAddr := ParseAddr(target) + if targetAddr == nil { + err = fmt.Errorf("target address parse error") + return + } + + bindAddr, err := ClientHandshake(c, targetAddr, CmdUDPAssociate) if err != nil { err = fmt.Errorf("%v client hanshake error", err) return @@ -50,11 +61,6 @@ func DialUDP(proxy, target string) (_ net.PacketConn, _ net.Addr, err error) { return } - targetAddr, err := net.ResolveUDPAddr("udp", target) - if err != nil { - return - } - pc, err := net.ListenPacket("udp", "") if err != nil { return @@ -74,11 +80,11 @@ func DialUDP(proxy, target string) (_ net.PacketConn, _ net.Addr, err error) { type socksUDPConn struct { net.PacketConn tcpConn net.Conn - targetAddr net.Addr + targetAddr Addr } func (c *socksUDPConn) WriteTo(b []byte, addr net.Addr) (n int, err error) { - packet, err := EncodeUDPPacket(c.targetAddr.String(), b) + packet, err := EncodeUDPPacket(c.targetAddr, b) if err != nil { return } diff --git a/proxy/socks/socks.go b/proxy/socks/socks.go index 5584b14..c9934e9 100755 --- a/proxy/socks/socks.go +++ b/proxy/socks/socks.go @@ -235,12 +235,11 @@ func DecodeUDPPacket(packet []byte) (addr Addr, payload []byte, err error) { return } -func EncodeUDPPacket(addr string, payload []byte) (packet []byte, err error) { - rAddr := ParseAddr(addr) - if rAddr == nil { - err = errors.New("cannot parse addr") +func EncodeUDPPacket(addr Addr, payload []byte) (packet []byte, err error) { + if addr == nil { + err = errors.New("address is invalid") return } - packet = bytes.Join([][]byte{{0, 0, 0}, rAddr, payload}, []byte{}) + packet = bytes.Join([][]byte{{0, 0, 0}, addr, payload}, []byte{}) return }